如何在Groovy中读取以下字符串

肺动脉高压

我正在阅读以下Groovy中的字符串并声明值。

[Event[attributes={id=c8475082-fa09-4b99-89c5-9b839d8321f6, name=updateDate, eventType=updateDate}; 
value=[eventTime[attributes={}; 
value=[2014-11-07T04:35:01Z]], 
eventAttributes[attributes={}; 
value=[EventAttribute
[attributes={}; 
value=[name[attributes={}; value=[userId]], 
value[attributes={}; 
value=[1626383939]]]]]]]]]

我假设上面的整个字符串代表一个内部列表,所以我尝试如下

assert ["userId"] == MyList.Event.eventAttributes.EventAttribute.value.text()

然后给出以下错误

groovy.lang.MissingMethodException: No signature of method: java.util.ArrayList.text() is applicable 

    for argument types: () values: []
    Possible solutions: get(int), get(int), set(int, java.lang.Object), set(int, java.lang.Object), getAt(java.util.Collection), getAt(java.lang.String)

XML文件

.....
<Event id="c8475082-fa09-4b99-89c5-9b839d8321f6" name="updateDate" eventType="updateDate">
    <eventTime>2014-10-17T04:17:19Z</eventTime>
    <eventAttributes>
      <EventAttribute>
        <name>userId</name>
        <value>1626383939</value>
      </EventAttribute>
    </eventAttributes>
  </Event>

......

我应该怎么做

cfrick

因为您对EventAttribute包含:的:s感兴趣,所以name='userId最好只搜索它,断言是否已找到它,然后检查该值。我的猜测是,属性的​​顺序可能是随机的。

def records = new XmlParser().parseText('''\
<?xml version="1.0" encoding="UTF-8"?>
<SystemEvents feedtime="04:17:37" feeddate="20141017" version="0.0.0.2">
<Event id="c8475082-fa09-4b99-89c5-9b839d8321f6" name="updateDate" eventType="updateDate">
<eventTime>2014-10-17T04:17:19Z</eventTime>
<eventAttributes>
<EventAttribute>
<name>userId</name>
<value>1626383939</value>
</EventAttribute>
</eventAttributes>
</Event>
</SystemEvents>''')
def events = records.Event.findAll{ it.'@name'.contains('updateDate') }

// find by name=userId
def userIdEA = events.eventAttributes.EventAttribute.find{ it.name.text()=='userId' }
assert userIdEA
assert userIdEA.value.text()=='1626383939'

(对我而言)XMLParser中的toString相当不可读。您最好将XML作为思维模型来查找路径。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章