Как вставить содержимое XmlCursor в документ DOM
Вопрос
Некоторые API возвращают мне XmlCursor, указывающий на корень XML-документа.Мне нужно вставить все это в другой документ, представленный org.w3c.DOM.
В начале:XmlCursor указывает на
<a>
<b>
some text
</b>
</a>
DOM-документ:
<фу>
</foo>
В конце я хочу изменить исходный документ DOM следующим образом:
<фу>
<someOtherInsertedElement>
u003Ca>u003Cb>немного текстаu003C/b>u003C/a>
</someOtherInsertedElement>
</foo>
ПРИМЕЧАНИЕ: document.importNode(cursor.getDomNode())
не работает - выдается исключение: НЕ_SUPPORTED_ERR:Реализация не поддерживает запрошенный тип объекта или операции.
Решение
Попробуйте что-то вроде этого:
Node originalNode = cursor.getDomNode();
Node importNode = document.importNode(originalNode.getFirstChild());
Node otherNode = document.createElement("someOtherInsertedElement");
otherNode.appendChild(importNode);
document.appendChild(otherNode);
Другими словами:
- Получите узел DOM от курсора.В данном случае это DOMDocument, поэтому выполните getFirstChild(), чтобы получить корневой узел.
- Импортируйте его в DOMDocument.
- Делайте другие вещи с помощью DOMDocument.
- Добавьте импортированный узел к правому узлу.
Причина импорта заключается в том, что узел всегда «принадлежит» данному DOMDocument.Простое добавление исходного узла вызовет исключения.
Другие советы
У меня была та же проблема.
Это не удалось:
Node importNode = document.importNode(originalNode);
Это решило проблему:
Node importNode = document.importNode(originalNode.getFirstChild());