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

时间:2014-11-08 03:49:25

标签: 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>

......

我该怎么做

2 个答案:

答案 0 :(得分:2)

因为您对包含EventAttribute的{​​{1}}:s感兴趣,您最好只搜索它,断言,找到它然后检查值。我的猜测是,属性的​​顺序可能是随机的。

name='userId

来自XMLParser的toString对我来说是相当难以理解的。您最好使用XML作为您的心智模型来找到您的路径。

答案 1 :(得分:0)

spread运算符可以对数组的每个元素应用方法调用。

assert [“userId”] == MyList.Event.eventAttributes.EventAttribute.value * .text()