Java + DOM: Как преобразовать дерево DOM без пространств имен в дерево DOM с учетом пространства имен? - PullRequest
3 голосов
/ 05 июня 2010

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

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

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

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

Существуют ли более или менее простые решения для этого?

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

1 Ответ

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

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

...