我在调用Web服务后将SOAP消息作为字符串获取。
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<PassOracleXMLDataResponse xmlns="http://tempuri.org/">
<PassOracleXMLDataResult>
<gesystem xmlns="">
<return_code>0</return_code>
<message>PRS User does not exists in GETS</message>
<invoiceid>TESTADDTLINFO2</invoiceid>
<datetime>Apr 17 2013 4:19PM</datetime>
</gesystem>
</PassOracleXMLDataResult>
</PassOracleXMLDataResponse>
</soap:Body>
</soap:Envelope>
我需要检索值和元素。当我尝试使用一个简单的SAXBuilder来构建一个Document并遍历它时,我在尝试使用“soap:Body”获取getChild时遇到异常
getChild("soap:Body") - returns null.
答案 0 :(得分:2)
假设你正在使用JDOM:
soap:Body实际上是两部分:命名空间和元素名称。您需要使用Namespace类在检索时包含该信息。
尝试做类似的事情:
envelopeNode.getChild("Body",envelopeNode.getNamespace());
这将使它查找名为“Body”的子元素,以及与信封节点相同的命名空间。
答案 1 :(得分:0)
谢谢彼得,它有效。只有一件奇怪的事情。当我为“PassOracleXMLDataResult”获取子元素时,它还需要提供一个名称空间作为第二个参数
Namespace nmspc = Namespace.getNamespace("http://tempuri.org/");
Element parseResponse = bodyEm.getChild("PassOracleXMLDataResponse", nmspc);
Element passResult = parseResponse.getChild("PassOracleXMLDataResult", nmspc);