Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Groovy读取条件XML节点_Groovy_Xml Parsing - Fatal编程技术网

从Groovy读取条件XML节点

从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-

我有以下回应:

我需要选择具有nIdType=“ACTIVE”的地址和nId

可能会有更多的地址和nId,我需要选择第一个匹配的

我写了groovy脚本,但没有获得任何成功。请帮助我,因为我是新手

有可能所有地址都有或没有nId

我有一个测试属性,我需要更新地址和nId

我需要通过groovy脚本实现

<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