我在尝试通过 getElementFragmentNs
提取元素时遇到问题。
这里是示例测试:
@Test
public void shouldNotShadowNamespaceAndAddSiblingNamespaces() throws Exception {
byte[] bytes = ("<ns2:Response xmlns=\"urn://message\" xmlns:ns2=\"urn://ns2\">\n" +
" <ns2:Data>\n" +
" <Content>\n" +
" <tns:Response\n" +
" xmlns:tns=\"urn://tns\"\n" +
" xmlns=\"urn://shadow\">\n" +
" <tns:test/>\n" +
" </tns:Response>\n" +
" </Content>\n" +
" <AttachmentHeaderList>\n" +
" <AttachmentHeader/>\n" +
" </AttachmentHeaderList>\n" +
" </ns2:Data>\n" +
"</ns2:Response>").getBytes("UTF-8");
VTDGen vg = new VTDGen();
vg.setDoc(bytes);
vg.parse(true); // set namespace awareness to true
VTDNav vn = vg.getNav();
AutoPilot ap = new AutoPilot(vn);
ap.selectElement("AttachmentHeader");
ap.iterate();
ElementFragmentNs efn = vn.getElementFragmentNs();
byte[] result = efn.toBytes();
assertThat(new String(result, "UTF-8"), is("<AttachmentHeader xmlns=\"urn://message/\"/>"));
}
实际结果是:
<AttachmentHeader xmlns:tns="urn://tns" xmlns="urn://shadow" xmlns:ns2="urn://ns2"/>
但我期望:
<AttachmentHeader xmlns="urn://message/"/>
为什么它会使用同级子元素中的默认命名空间来隐藏默认命名空间?为什么它添加了不必要的命名空间?
最佳答案
我不确定 XML 文档是否可以有 2 个默认命名空间,一个位于根元素,一个位于子元素级别。
关于java - VTD-XML 遮盖同级元素的命名空间并添加意外的 ns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58063035/