我有一个样本回复:

<?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/"));


我实际上需要从Document开始从jdom Element检索的jdom TrackResponse对象。

解决方案还是更好的替代方案?

最佳答案

通过以下方式检索您的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()

07-26 09:39