Как вставить содержимое 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);
Итак, другими словами:
- Получите DOM Node от курсора. В данном случае это DOMDocument, поэтому выполните getFirstChild(), чтобы получить корневой узел.
- Импортируйте его в DOMDocument.
- Делайте другие вещи с DOMDocument.
- Добавьте импортированный узел к правому узлу.
Причина импорта заключается в том, что узел всегда "принадлежит" данному DOMDocument. Просто добавление исходного узла вызовет исключения.
У меня была такая же проблема.
Это не удалось:
Node importNode = document.importNode(originalNode);
Это решило проблему:
Node importNode = document.importNode(originalNode.getFirstChild());