我正在阅读以下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>
......
我应该怎么做
因为您对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] 删除。
我来说两句