Скажем, у меня есть дом узел так:преобразование узла дом рекурсивно с помощью Java
org.w3c.dom.Element узла:
<node id="101">
<node id="102">
<node id="103" />
</node>
<node id="104">
<node id="103" />
</node>
</node>
Чтобы преобразовать идентификатор атрибута Я хотел бы сделать следующее в моем Java код:
String nodeId = node.getAttribute("id");
String newNodeId = "prefix/" + nodeId;
node.getAttributeNode("id").setValue(newNodeId);
выше узел затем затем преобразуется в:
<node id="prefix/101">
<node id="102">
<node id="103" />
</node>
<node id="104">
<node id="103" />
</node>
</node>
Но я хочу рекурсивно изменить все подузлы. Ожидаемый преобразованный узел:
<node id="prefix/101">
<node id="prefix/102">
<node id="prefix'103" />
</node>
<node id="prefix/104">
<node id="prefix/103" />
</node>
</node>
Я мог бы пропустить дочерние узлы, но тогда узел может иметь несколько уровней детей. В этом случае корень имеет два под-уровня. Но, если есть еще несколько подуровней, то цикл через дочерние узлы каждого уровня кажется немного неудобным. Есть ли более прямой подход для достижения этой задачи?
Спасибо, Sony
Я работаю на Dóm узлах. Извините, что раньше не было ясно. Будет ли ваша оценка работать и на dom-узлах? – sony
В этом примере используется W3C DOM, объекты из пакета 'org.w3c.dom'. Я добавил импорт. – laz
Преобразование работает. Спасибо! Но, когда я пытаюсь сделать следующее: public void transform (Element parent, Element child) { Документ parent_doc = parent.getOwnerDocument(); child = (Element) parent_doc.importNode (child, true); /* преобразовать ребенка как предложено */ parent.appendChild (child);} Я получаю сообщение об ошибке в последней строке - 0: Неожиданное исключение: org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: Узел используется в другом документе чем тот, который его создал. org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: Узел используется в другом документе, кроме того, который его создал. – sony