1

我有以下 SOAP 响应:

我需要选择具有 nIdType="ACTIVE" 的 Address 和 nId 。

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

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

有可能所有地址可能有也可能没有nId

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

我需要通过 groovy 脚本来实现 wh

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

1 回答 1

2

您可以这样做(我必须在</SOAP-ENV:Envelope>您的 XML 中添加一个结束标记并更改</ns2:macAddress></ns2:Address>使其有效 XML)

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

但很难从你的问题中确切地说出你在追求什么

于 2012-08-03T15:00:41.373 回答