如何从 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>
我想删除 Envelope
、Header
和 Body
标签,只使用从 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()
。
我有一个示例回复:
<?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/"));
我实际上需要一个从 TrackResponse
.
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()
。