解析 Soap 响应 - XML/XPATH(在 soapUI 中)(SoapUI 响应中的命名空间)
Parsing Soap response - XML/XPATH (In soapUI) (namespace in SoapUI response)
如果我有如下 Soap 响应
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns0:SomeResponse xmlns:ns0="urn:ABC:EFG:HIJ:Some_WS">
<ns0:ID>6384</ns0: ID>
<ns0:Some_ID>10530</ns0: Some_ID >
<ns0:Status>SomeStatus</ns0:Status>
<ns0:Number>INT1037;INT1027;</ns0: Number>
</ns0:SomeResponse >
</soapenv:Body>
</soapenv:Envelope>
如何检索 Some_ID
值。我在 SoapUI 中使用以下代码来检索 Some_ID
.
的值
...
def response = tstep.getPropertyValue("response");
def gutils = new com.eviware.soapui.support.GroovyUtils( context );
def holder = gutils.getXmlHolder("$response");
// define namespace
holder.namespaces["ns0"] = "http://www.w3.org/2001/XMLSchema-instance"
def val1 = holder.getNodeValue("//ns0:SomeResponse/ns0:Some_ID");
log.info(val1)
但是 log.info
给了我 null
价值。
要仅检索一个特定值,您可以使用一个简单的方法:
def val1 = context.expand('${TestStepName#Response#//*:Some_ID}')
对于更复杂的解析,您可能会使用 XmlHolder
或 XmlParser
或 XmlSlurper
。您可以从 official documentation.
中了解这些内容
在您的脚本中,尝试使用 tstep.getPropertyValue("Response")
,大写 R。
我成功了。我不得不将 namespaces
声明更改为以下内容。
holder.namespaces["ns0"] = "urn:ABC:EFG:HIJ:Some_WS"
如果我有如下 Soap 响应
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns0:SomeResponse xmlns:ns0="urn:ABC:EFG:HIJ:Some_WS">
<ns0:ID>6384</ns0: ID>
<ns0:Some_ID>10530</ns0: Some_ID >
<ns0:Status>SomeStatus</ns0:Status>
<ns0:Number>INT1037;INT1027;</ns0: Number>
</ns0:SomeResponse >
</soapenv:Body>
</soapenv:Envelope>
如何检索 Some_ID
值。我在 SoapUI 中使用以下代码来检索 Some_ID
.
...
def response = tstep.getPropertyValue("response");
def gutils = new com.eviware.soapui.support.GroovyUtils( context );
def holder = gutils.getXmlHolder("$response");
// define namespace
holder.namespaces["ns0"] = "http://www.w3.org/2001/XMLSchema-instance"
def val1 = holder.getNodeValue("//ns0:SomeResponse/ns0:Some_ID");
log.info(val1)
但是 log.info
给了我 null
价值。
要仅检索一个特定值,您可以使用一个简单的方法:
def val1 = context.expand('${TestStepName#Response#//*:Some_ID}')
对于更复杂的解析,您可能会使用 XmlHolder
或 XmlParser
或 XmlSlurper
。您可以从 official documentation.
在您的脚本中,尝试使用 tstep.getPropertyValue("Response")
,大写 R。
我成功了。我不得不将 namespaces
声明更改为以下内容。
holder.namespaces["ns0"] = "urn:ABC:EFG:HIJ:Some_WS"