Saxon 9 не понимает renameNode() от Xerces

У меня есть DOM Document, созданный DocumentBuilder Apache Xerces 2.1.9:

<x xmlns="#old-namespace">hello, world</x>

Теперь я переименовываю его корневой узел, чтобы изменить пространство имен:

Element root = dom.getDocumentElement();
dom.renameNode(root, "x", "#new-namespace");

Затем я преобразовываю документ в текстовый/xml, используя Saxon 9, и корневой узел не меняет свое пространство имен.

Это известная ошибка/несовместимость? С Saxon 8.7 точно такой же код работает без проблем. Если нужно, могу выложить весь код.


person yegor256    schedule 18.09.2013    source источник


Ответы (1)


К сожалению, API-интерфейсы DOM позволяют создавать внутренне противоречивую модель DOM. Существует более одного способа определения URI пространства имен элемента, и если модель DOM несовместима, они могут давать разные ответы (например, свойство URI пространства имен узла может не соответствовать URI пространства имен, полученному путем разрешения префикса против Пространства имен в области видимости Saxon мало что может с этим поделать.

(Лучший ответ — не использовать DOM, а использовать более «современную» древовидную модель, такую ​​как XOM или JDOM2).

person Michael Kay    schedule 20.09.2013