从Groovy读取条件XML节点
我有以下回应: 我需要选择具有nIdType=“ACTIVE”的地址和nId 可能会有更多的地址和nId,我需要选择第一个匹配的 我写了groovy脚本,但没有获得任何成功。请帮助我,因为我是新手 有可能所有地址都有或没有nId 我有一个测试属性,我需要更新地址和nId 我需要通过groovy脚本实现从Groovy读取条件XML节点,groovy,xml-parsing,Groovy,Xml Parsing,我有以下回应: 我需要选择具有nIdType=“ACTIVE”的地址和nId 可能会有更多的地址和nId,我需要选择第一个匹配的 我写了groovy脚本,但没有获得任何成功。请帮助我,因为我是新手 有可能所有地址都有或没有nId 我有一个测试属性,我需要更新地址和nId 我需要通过groovy脚本实现 <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<ns2:GetD xmlns:ns2="http://xyxz/pqr" xmlns:ns3="http://pqp/ptr" xmlns:ns4="http://nhgg./ns">
<ns2:du>
<ns2:Address>UUUUUU</ns2:macAddress>
</ns2:du>
<ns2:du>
<ns2:Address>XXXXXXX</ns2:macAddress>
</ns2:du>
<ns2:du>
<ns2:Address>PQWWEEE</ns2:macAddress>
<ns2:dP>
<ns2:pN>1</ns2:pN>
<ns2:sE>
<ns2:nId>08767727</ns2:nId>
<ns2:nIdType>ACTIVE</ns2:nIdType>
<ns2:sE>
</ns2:dP>
</ns2:du>
<ns2:du>
<ns2:Address>TTTTTTTT</ns2:macAddress>
</ns2:du>
</ns2:GetD>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
乌乌
XXXXXXX
PQWWEEE
1.
08767727
活跃的
滴滴答答
您可以这样做(我必须在XML中添加一个结束标记
,并将
更改为
,使其成为有效的XML)
但是很难从你的问题中准确地说出你想要的是什么非常感谢..我不能硬编码XML,因为这个响应来自一个我本质上是动态的服务。。def response=context.expand(“${getD#response}”)我可以使用response而不是xml吗variable@user1574409是的,您应该能够(假设
response
是一个包含有效XML的字符串)。我只是为了一个工作示例而硬编码谢谢Tim.它工作了并且满足了我的要求..在requiremnet之上如果我想打印所有具有nIdType==“active”的活动地址,该怎么办。我是否需要使用findall而不是all,以及如何在循环中打印all或其他技术将find
更改为findall
,然后使用a?.each{println it.Address?.text()}
def xml = '''<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
| <SOAP-ENV:Header/>
| <SOAP-ENV:Body>
| <ns2:GetD xmlns:ns2="http://xyxz/pqr" xmlns:ns3="http://pqp/ptr" xmlns:ns4="http://nhgg./ns">
| <ns2:du>
| <ns2:Address>UUUUUU</ns2:Address>
| </ns2:du>
| <ns2:du>
| <ns2:Address>XXXXXXX</ns2:Address>
| </ns2:du>
| <ns2:du>
| <ns2:Address>PQWWEEE</ns2:Address>
| <ns2:dP>
| <ns2:pN>1</ns2:pN>
| <ns2:sE>
| <ns2:nId>08767727</ns2:nId>
| <ns2:nIdType>ACTIVE</ns2:nIdType>
| </ns2:sE>
| </ns2:dP>
| </ns2:du>
| <ns2:du>
| <ns2:Address>TTTTTTTT</ns2:Address>
| </ns2:du>
| </ns2:GetD>
| </SOAP-ENV:Body>
|</SOAP-ENV:Envelope>'''.stripMargin()
def a = new XmlSlurper().parseText( xml ).Body?.GetD?.du?.find { node ->
node.dP?.sE?.nIdType.text() == 'ACTIVE'
}
println "First Active Address = ${a?.Address?.text()}"
First Active Address = PQWWEEE