首先很抱歉,我非常清楚许多人发布了类似的问题,但我已经完成了这些问题,但我无法找到解决方案。
虽然我在其他一些程序中使用了XPath而没有任何问题,但为此,我无法生成正确的XPath。 由于Web服务的https URL,因为我无法使用SAAJ,因为它需要SSL证书才能连接。 所以必须去HttpClient,输出如下:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns:getBalanceResponse xmlns:ns="http://services.soap.xyzservice.com">
<ns:return xmlns:ax23="http://dto.soap.xyzservice.com/xsd" type="com.valuecardservice.soap.dto.abcxyz">
<ax23:errorMessage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
<ax23:resultCode>200</ax23:resultCode>
</ns:return>
</ns:getBalanceResponse>
</soapenv:Body>
</soapenv:Envelope>
我添加了名称空间上下文以及
doc.setNamespaceAware(true);
xpath.setNamespaceContext(new NamespaceContext() {
public Iterator getPrefixes(String namespaceURI) {
return null;
}
public String getPrefix(String namespaceURI) {
return null;
}
public String getNamespaceURI(String prefix) {
if (prefix.equals("soapenv"))
return "http://schemas.xmlsoap.org/soap/envelope/";
if (prefix.equals("ns"))
return "http://services.soap.xyzservice.com";
if (prefix.equals("ax23"))
return "http://http://dto.soap.xyzservice.com/xsd";
return null;
}
});
// xpath evaluate code to parse
Node resultCdNode = ((NodeList) xpath.evaluate(
"//soapenv:Envelope/soapenv:Body/ns:getBalanceResponse/ns:return/ax23:resultCode/text()",
root,
XPathConstants.NODESET)
).item(0);
此返回null。我尝试了不同的xpath但没有用,一切都重新调整为空。
我尝试了很多选项然后我开始了解这个工具,但不确定它的工作是否正确
http://xmltoolbox.appspot.com/xpath_generator.html
在此我尝试使用上面的xml生成xpath。我无法在下面提到的xpath之后生成路径。 它没有显示任何选项。
soapenv:Envelope/soapenv:Body/ns:getBalanceResponse/
我无法弄清楚xpath有什么问题。获取resultCode
值的正确xpath是什么?
答案 0 :(得分:0)
问题是您在http://
方法中为ax23
前缀意外指定了getNamespaceURI()
两次。