VTD-XML затеняет пространство имен от родственного элемента и добавляет неожиданные ns - PullRequest
0 голосов
/ 23 сентября 2019

У меня проблема при попытке извлечь элемент с помощью 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/"/>

Почему он скрывает пространство имен по умолчанию с пространством имен по умолчанию от дочернего подэлемента?И почему он добавляет ненужные пространства имен из него?

1 Ответ

0 голосов
/ 23 сентября 2019

Я не уверен, что документ XML может иметь 2 пространства имен по умолчанию, одно на корневом элементе и одно на дочернем уровне.

...