3

调用 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 并遍历它时,在尝试 getChild on "soap: Body" 后出现异常

getChild("soap:Body") - returns null.
4

2 回答 2

2

假设您使用的是 JDOM:

soap:Body 实际上是两部分:命名空间和元素名称。在检索信息时,您需要使用 Namespace 类来包含该信息。

尝试做类似的事情:

envelopeNode.getChild("Body",envelopeNode.getNamespace());

这将使它查找名称为“Body”的子元素,并且与信封节点具有相同的命名空间。

于 2013-04-17T22:25:42.150 回答
0

谢谢彼得,它奏效了。只有一件奇怪的事情。当我获得“PassOracleXMLDataResult”的子元素时,它还需要提供命名空间作为第二个参数

                Namespace nmspc = Namespace.getNamespace("http://tempuri.org/");    
            Element parseResponse = bodyEm.getChild("PassOracleXMLDataResponse", nmspc);            
            Element passResult = parseResponse.getChild("PassOracleXMLDataResult", nmspc);   
于 2013-04-18T15:19:26.070 回答