使用 groovy XMLParser 读取 namespaces/SOAP 响应中的 xml 值
Read xml values in namespaces/SOAP response using groovy XMLParser
我正在使用 groovy 文件,其中我使用 xmlParser 生成 XML.Now,我想获取 xml 的标签值。
这是我的代码
def rootnode = new XmlParser().parseText(responseXml);
输出
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="urn:creditCard">
<SOAP-ENV:Body><ns1:creditCardResponse xmlns:ns1="urn:creditCard">
<return xsi:type="tns:RPResponse">
<Status xsi:type="xsd:int">0</Status>
</return>
</ns1:creditCardResponse>
</SOAP-ENV:Body>
我试过 rootnode.Status[0].text()
然而它没有得到。
我怎样才能得到其中的 "Status" 值?有点困惑。
谢谢,
只需使用 "path" 到您感兴趣的变量即可。您要么必须 "quote" 命名空间(这意味着,使用字符串作为访问器,因为像 :
和 -
这样的字符将被 groovy 解释)或使用 groovy.xml.Namespace
帮手。例如。 (见评论):
def xml = new groovy.util.XmlParser().parseText('''\
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="urn:creditCard">
<SOAP-ENV:Body><ns1:creditCardResponse xmlns:ns1="urn:creditCard">
<return xsi:type="tns:RPResponse">
<Status xsi:type="xsd:int">666</Status>
</return>
</ns1:creditCardResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
''')
// XXX namespaces quoted
assert xml.'SOAP-ENV:Body'.'ns1:creditCardResponse'.return.Status.text()=='666'
// XXX access by namespace
def nsSoapEnv = new groovy.xml.Namespace('http://schemas.xmlsoap.org/soap/envelope/', 'SOAP-ENV')
def nsNs1 = new groovy.xml.Namespace('urn:creditCard', 'ns1')
assert xml[nsSoapEnv.Body][nsNs1.creditCardResponse].return.Status.text()=='666'
我正在使用 groovy 文件,其中我使用 xmlParser 生成 XML.Now,我想获取 xml 的标签值。
这是我的代码
def rootnode = new XmlParser().parseText(responseXml);
输出
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="urn:creditCard">
<SOAP-ENV:Body><ns1:creditCardResponse xmlns:ns1="urn:creditCard">
<return xsi:type="tns:RPResponse">
<Status xsi:type="xsd:int">0</Status>
</return>
</ns1:creditCardResponse>
</SOAP-ENV:Body>
我试过 rootnode.Status[0].text()
然而它没有得到。 我怎样才能得到其中的 "Status" 值?有点困惑。
谢谢,
只需使用 "path" 到您感兴趣的变量即可。您要么必须 "quote" 命名空间(这意味着,使用字符串作为访问器,因为像 :
和 -
这样的字符将被 groovy 解释)或使用 groovy.xml.Namespace
帮手。例如。 (见评论):
def xml = new groovy.util.XmlParser().parseText('''\
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="urn:creditCard">
<SOAP-ENV:Body><ns1:creditCardResponse xmlns:ns1="urn:creditCard">
<return xsi:type="tns:RPResponse">
<Status xsi:type="xsd:int">666</Status>
</return>
</ns1:creditCardResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
''')
// XXX namespaces quoted
assert xml.'SOAP-ENV:Body'.'ns1:creditCardResponse'.return.Status.text()=='666'
// XXX access by namespace
def nsSoapEnv = new groovy.xml.Namespace('http://schemas.xmlsoap.org/soap/envelope/', 'SOAP-ENV')
def nsNs1 = new groovy.xml.Namespace('urn:creditCard', 'ns1')
assert xml[nsSoapEnv.Body][nsNs1.creditCardResponse].return.Status.text()=='666'