在Groovy中查找XML元素

在Groovy中查找XML元素,xml,groovy,Xml,Groovy,如何在XMLSOAP响应中通过元素的名称(而不是像:first();last();parent()这样的引用)查找元素 <xyzOrderReturn> <xyzOrderResponse> <UlidList> <Ulid ExtnUlid="1-222-333"> <OrderList TotalRecords="0"/> </Ulid> <

如何在XMLSOAP响应中通过元素的名称(而不是像:first();last();parent()这样的引用)查找元素

<xyzOrderReturn>
  <xyzOrderResponse>
    <UlidList>
        <Ulid ExtnUlid="1-222-333">
            <OrderList TotalRecords="0"/>
        </Ulid>
    </UlidList>
  </xyzOrderResponse>
</xyzOrderReturn>

这两种方法都有效,只是在打印列表时不会显示,但列表大小为1,并且:

def result = new XmlSlurper().parseText(xml)

def element1 = result.breadthFirst().findAll { it.name() == 'xyzOrderResponse' }
def element2 = result.depthFirst().findAll { it.name() == 'xyzOrderResponse' }

println element1*.name()
println element2*.name()
印刷品

[xyzOrderResponse]
[xyzOrderResponse]
您还可以将depthFirst变量替换为:

def element2 = result.'**'.findAll { it.name() == 'xyzOrderResponse' }

谢谢是否要从输出中删除[]?当然,使用
find
而不是
findAll
返回单个元素而不是列表。确定。我们可以通过.replaceAll(“[\\[\]]”,“”)删除方括号。我计划将结果与另一个字符串进行比较。例如:log=element1*.name()def result=log.replaceAll(“[\[\]]”),String svc=“xyzOrderResponse”if(svc!=result){send email notification.execute()}是的,只需使用
find
获取单个元素。不要使用
findAll
获取列表,将其转换为字符串,然后破解该字符串
find
元素。name()
是前进的方向
def element2 = result.'**'.findAll { it.name() == 'xyzOrderResponse' }