Как вставить содержимое XmlCursor в документ DOM

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

При запуске: XmlCursor работает над

<a> <b> some text </b> </a>

Документ DOM:

<foo>

</foo>

В конце я хочу изменить исходный документ DOM следующим образом:

<foo>

  <someOtherInsertedElement>

    <a> <b> some text </b> </a>

  </someOtherInsertedElement>

</foo>

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

2 ответа

Решение

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

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

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

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

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

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

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

Node importNode = document.importNode(originalNode);

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

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

Другие вопросы по тегам