java - VTD-XML 遮盖同级元素的命名空间并添加意外的 ns

标签 java xml xml-parsing vtd-xml

我在尝试通过 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/

相关文章:

java : spawning new thread is causing original thread to halt

java - 编写模块化 Java 应用程序

android - 如何在 RelativeLayout 中的 View 之间添加空间

xml - 使用 SAX 解析器解析 XML 时 &(&) 之前的数据被截断

Java GUI 打开一个新的 JFrame

java - 在 Java 中返回排序列表

java - 使用正则表达式提取两个标签之间的文本

c# - Xml 数据到 WPF TreeView 的双向绑定(bind)

ios - 我将如何围绕 XML 请求创建回调?

xml - Perl XML::DOM 解析器的使用