【发布时间】:2015-03-27 11:40:50
【问题描述】:
我有一个这样的 XML 文档:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:sec="http://namespace1" xmlns:ser="http://namespace2">
<soap:Header>
<sec:RequestHeader>
<sec:SenderId>ABCD</sec:SenderId>
<sec:SignerId1>ABCD</sec:SignerId1>
<sec:SignerId2></sec:SignerId2>
<sec:SignerId3></sec:SignerId3>
<sec:DBCryptId></sec:DBCryptId>
<sec:RequestId>CPMDDEV4110066</sec:RequestId>
<sec:Timestamp>2015-03-24T15:40:00Z</sec:Timestamp>
<sec:Language>DA</sec:Language>
</sec:RequestHeader>
</soap:Header>
<soap:Body>
<ser:GetStatus>
<ser:dacGetStatusInput>
<ser:MerchantId>A</ser:MerchantId>
<ser:OrderId>B</ser:OrderId>
<ser:CustomerId></ser:CustomerId>
<ser:ActionCode>C</ser:ActionCode>
<ser:Test>Y</ser:Test>
</ser:dacGetStatusInput>
</ser:GetStatus>
</soap:Body>
</soap:Envelope>
无论我做什么,我都无法让 org.w3c.dom 或 JDom 停止对源文档中的命名空间进行规范化。
如果我尝试将顶部节点元素添加到新文档中,例如:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
org.w3c.dom.Document doc = builder.newDocument();
document = doc.importNode(document, true);
doc.appendChild(document);
我发现如果我dump了doc的内容,内容已经变成:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
<sec:RequestHeader xmlns:sec="http://namespace1">
<sec:SenderId>ABCD</sec:SenderId>
<sec:SignerId1>ABCD</sec:SignerId1>
<sec:SignerId2/>
<sec:SignerId3/>
<sec:DBCryptId/>
<sec:RequestId>CPMDDEV4110066</sec:RequestId>
<sec:Timestamp>2015-03-24T15:40:00Z</sec:Timestamp>
<sec:Language>DA</sec:Language>
</sec:RequestHeader>
</soap:Header>
<soap:Body>
<ser:GetStatus xmlns:ser="http://namespace2">
<ser:dacGetStatusInput>
<ser:MerchantId>A</ser:MerchantId>
<ser:OrderId>B</ser:OrderId>
<ser:CustomerId/>
<ser:ActionCode>C</ser:ActionCode>
<ser:Test>Y</ser:Test>
</ser:dacGetStatusInput>
</ser:GetStatus>
</soap:Body>
</soap:Envelope>
sec 和 ser 这两个命名空间声明已移至第一次使用的位置。 虽然这种规范化是正确的,但我希望 DOM 和 JDOM 停止这样做,让我的文档不理会 :-)
关于如何实现这一点的任何建议?
【问题讨论】:
标签: xml normalization transformation xml-namespaces jdom