如何从 SOAP 响应中仅获取 XML 内容

How to get only XML content from a SOAP response

我有一个示例回复:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header/>
    <soapenv:Body>
        <trk:TrackResponse xmlns:trk="somens1">
            <common:Response xmlns:common="somens2">
                <common:ResponseStatus>
                    <common:Code>1</common:Code>
                    <common:Description>Success</common:Description>
                </common:ResponseStatus>
                <common:TransactionReference>
                    <common:CustomerContext>Sample Response</common:CustomerContext>
                </common:TransactionReference>
            </common:Response>

        </trk:TrackResponse>
    </soapenv:Body>
</soapenv:Envelope>

我想删除 EnvelopeHeaderBody 标签,只使用从 TrackResponse 开始的 xml。

我正在尝试使用 jdom 遍历响应。

   Element body = jdom.getRootElement().getChild("Body", Namespace.getNamespace("http://schemas.xmlsoap.org/soap/envelope/"));

我实际上需要一个从 TrackResponse.

开始的 jdom Element 检索到的 jdom Document 对象

解决方案或更好的替代方案?

您的 body 内容通过以下方式检索:

Element body = jdom.getRootElement().getChild("Body", Namespace.getNamespace("http://schemas.xmlsoap.org/soap/envelope/"));

做:

Namespace trk = Namespace.getNamespace("somens1");
Element response = body.getChild("TrackResponse", trk);
response.detach();
Document doc = new Document(response);

这将创建一个带有 trk 前缀命名空间和 TrackResponse 根目录的新文档。将元素从一个位置(父级)移动到另一个位置时需要 detach()