我有一个样本回复:
<?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>
我想删除
Envelope
,Header
和Body
标记,并仅使用从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()
。