无法使用XPath查询此XML响应

时间:2016-02-29 08:09:59

标签: java xml xpath soap

首先很抱歉,我非常清楚许多人发布了类似的问题,但我已经完成了这些问题,但我无法找到解决方案。

虽然我在其他一些程序中使用了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是什么?

1 个答案:

答案 0 :(得分:0)

问题是您在http://方法中为ax23前缀意外指定了getNamespaceURI()两次。