Как вставить содержимое XmlCursor в документ DOM - PullRequest
2 голосов
/ 17 сентября 2008

Некоторые API возвращают мне XmlCursor, указывающий на корень XML-документа. Мне нужно вставить все это в другой документ, представленный org.w3c.DOM.

В начале: XmlCursor poiting on </p> <p><a> <b> some text </b> </a>

DOM документ: </p> <p><foo></p> <p></foo>

В конце я хочу изменить исходный документ DOM следующим образом: </p> <p><foo></p> <p> <someOtherInsertedElement></p> <p> <a> <b> some text </b> </a></p> <p> </someOtherInsertedElement></p> <p></foo>

ПРИМЕЧАНИЕ: document.importNode(cursor.getDomNode()) не работает - выдается исключение: NOT_SUPPORTED_ERR: реализация не поддерживает запрошенный тип объекта или операции.

Ответы [ 2 ]

6 голосов
/ 17 сентября 2008

Попробуйте что-то вроде этого:

Node originalNode = cursor.getDomNode();
Node importNode = document.importNode(originalNode.getFirstChild());
Node otherNode = document.createElement("someOtherInsertedElement");
otherNode.appendChild(importNode);
document.appendChild(otherNode);

Итак, другими словами:

  1. Получить узел DOM от курсора. В данном случае это DOMDocument, поэтому выполните getFirstChild (), чтобы получить корневой узел.
  2. Импортируйте его в DOMDocument.
  3. Делайте другие вещи с DOMDocument.
  4. Добавить импортированный узел к правому узлу.

Причина импорта заключается в том, что узел всегда «принадлежит» данному DOMDocument. Простое добавление исходного узла вызовет исключения.

1 голос
/ 02 ноября 2012

У меня была такая же проблема.

Это не удалось:

Node importNode = document.importNode(originalNode);

Это решило проблему:

Node importNode = document.importNode(originalNode.getFirstChild());

...