Java + DOM: как преобразовать дерево DOM без пространств имен в дерево DOM с учетом пространств имен?

Я получаю Document (дерево DOM) от определенного API (не в JDK). К сожалению, этот Document не поддерживает пространство имен. Насколько мне известно, однажды сгенерированная модель DOM не может быть «добавлена» впоследствии.

При преобразовании этого документа с помощью преобразователя в строку XML верен. Элементы имеют xmlns:... атрибуты и префиксы имен. Но с точки зрения DOM нет ни пространств имен, ни префиксов.

Мне нужно иметь возможность преобразовать этот Document в новый Document, который поддерживает пространство имен. Да, я мог бы сделать это, просто преобразовав ее в строку и обратно в DOM с включенными пространствами имен.

Но: для узлов исходного дерева установлены пользовательские объекты. Преобразование в строку и обратно сделало бы отображение этих пользовательских объектов на новый Document очень сложным, если не невозможным. Так что мне действительно нужен способ преобразовать DOM без пространства имен в DOM с пространством имен.

Есть ли для этого какие-то более-менее простые решения?

В худшем случае (чего я надеюсь избежать) было бы вручную перебирать старое Document дерево и создавать новое Node с учетом пространства имен для каждого старого Node. При этом нужно было вручную «анализировать» префиксы пространства имен, следить за xmlns-атрибутами и поддерживать сопоставление между префиксами и URI-пространствами имен. Многое может пойти не так.


person java.is.for.desktop    schedule 05.06.2010    source источник
comment
Вы когда-нибудь продвигались в этом вопросе? У меня похожая ситуация.   -  person mrswadge    schedule 04.09.2014


Ответы (1)


Думаю, вы догадались, что простого способа сделать это нет. Если у вас есть модель DOM в старом стиле, которая считает xmlns: foo = "xxx" атрибутом, а не объявлением пространства имен, нет никакого способа волшебным образом "обновить" его. Вам придется либо сериализовать / повторно сериализовать, либо вручную пройти по дереву и самостоятельно преобразовать эти атрибуты.

person Mike Sokolov    schedule 23.09.2011