我无法获得" idNumber"的节点值。在下面的响应中xml
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<SOAP_Customer_Metadata_CALLResponse xmlns="http://BCE/Customer_Metadata_WS.tws">
<oMetaDataID>
<ocrStatus>Failed</ocrStatus>
<guid>123456</guid>
<docType>03</docType>
<docDescription>South African ID</docDescription>
<surname>Choudhary</surname>
<fullName>Kanika</fullName>
<idNumber>KANJANDHS293</idNumber>
<dateOfBirth>22091945</dateOfBirth>
<dateIssued>01012016</dateIssued>
<countryOfBirth>India</countryOfBirth>
<idType>ID</idType>
<gender>F</gender>
</oMetaDataID>
<oMetaDataPOA>
<ocrStatus>Passed</ocrStatus>
<surname>Choudhary</surname>
<idNo>12345</idNo>
<address1>abc def</address1>
</oMetaDataPOA>
<oResubmission>No</oResubmission>
<oCASASequenceNo>1234578</oCASASequenceNo>
<oTypeOfCustomer>New</oTypeOfCustomer>
</SOAP_Customer_Metadata_CALLResponse>
</soapenv:Body>
</soapenv:Envelope>
在 Groovy脚本中使用以下代码 testStep:
holder.getNodeValue("//idNumber")
答案 0 :(得分:1)
这可能是因为XML具有默认命名空间:
xmlns="http://BCE/Customer_Metadata_WS.tws"
在SOAP_Customer_Metadata_CALLResponse
中没有前缀的所有元素,包括idNumber
,都被认为是在该命名空间中。要在默认命名空间中选择元素,您需要将前缀映射到默认命名空间URI,并在XPath中使用该前缀。例如,如果注册的前缀是d
://d:idNumber
(我不知道groovy但this post可能有用)。
等效的纯XPath方式将使用XPath函数local-name()
和namespace-uri()
的组合:
//*[local-name()='idNumber' and namespace-uri()='http://BCE/Customer_Metadata_WS.tws']
答案 1 :(得分:0)
当@ har07回答时,您可以定义命名空间前缀,然后在 XPath 中使用它。但是 SOAPUI XmlHolder
支持名称空间的通配符*
,因此您只需在 XPath 上使用它:
holder.getNodeValue("//*:idNumber")
修改强>
在评论中使用holder.getNodeValue("//*:oMetaDataID/ocrStatus")
的问题是你错过了第二个元素的命名空间,在这里你也可以再次使用*
通配符:
holder.getNodeValue("//*:oMetaDataID/*:ocrStatus")