生成XPATH查询问题

时间:2012-09-28 20:15:54

标签: java xpath

我有一个SOAP响应,如下所示

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<NTService.DisconnectResourceResult     xmlns="http://www.evolving.com/NumeriTrack/xsd">
<retData xmlns="">
<retCode>rcSuccess</retCode>
<retMsg/>
<resErrList/>
</retData>
</NTService.DisconnectResourceResult>
</soapenv:Body>
</soapenv:Envelope>

不善于生成XPATH查询,但使用SOAPUI我能够获取XPATH查询以获取retCode,如下所示:

//ns1:NTService.DisconnectResourceResult[1]/retData[1]/retCode[1]/text()

在Java中,我尝试获取retCode但无法获取输出。

XPath xpath = XPathFactory.newInstance().newXPath();
xpath.setNamespaceContext(new SoapNamespaceContext());

String     sxpath="//ns1:NTService.DisconnectResourceResult[1]/retData[1]/retCode[1]/text()";
System.out.println("sxpath is " + sxpath);
XPathExpression expr;
expr = xpath.compile(sxpath);
System.out.println("expr is " + expr);
Object result;
result = expr.evaluate(sb, XPathConstants.NODESET);
System.out.println("result is " + result);
NodeList nodes = (NodeList) result;
System.out.println("Length of result is " + nodes.getLength());
 for (int i = 0; i < nodes.getLength(); i++) {
     System.out.println(nodes.item(i).getNodeValue()); 
 }

我也设置了命名空间。

public String getNamespaceURI(String prefix) {
        System.out.println("Prefix is " +prefix);
      if (prefix == null) throw new NullPointerException("Null prefix");
        else if ("ns1".equals(prefix)) {
            System.out.println("Returning http://www.evolving.com/NumeriTrack/xsd");
            return "http://www.evolving.com/NumeriTrack/xsd";
                    }
        else if ("n".equals(prefix)) {
            System.out.println("Returning http://schemas.xmlsoap.org/soap/envelope/");
            return "http://schemas.xmlsoap.org/soap/envelope/";
                    }
        else if ("xml".equals(prefix)) return XMLConstants.XML_NS_URI;
        return XMLConstants.NULL_NS_URI;
}

`

任何人都可以建议我从SOAP消息响应中获取retCode。

由于

1 个答案:

答案 0 :(得分:0)

以下是答案:

            Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File("D:\\Loic_Workspace\\Test2\\res\\test.xml"));


        System.out.println(doc.getElementsByTagName("retCode").item(0).getTextContent());

您应该使用.getTextContent()方法。

将根据需要输出 rcSuccess :)

希望它有所帮助,