Прикрепление домена XERCES-C от XERCES-C DOMDOCUMENT к другому
Вопрос
Ранее я спрашивал об аналогичной проблеме в RapidXML, я хочу знать, теперь та же, но используя Xerces-C.
Я работаю над приложением C ++, которое необходимо проанализировать XML.
Рассмотрим следующее:
XML -файл: file1.xml
<root>
<node1>value1</node1>
<node2>value2</node2>
</root>
XML -файл: file2.xml
<anotherroot>
<anothernode1>anothervalue1</anothernode1>
<anothernode2>anothervalue2</anothernode2>
</anotherroot>
мой файл CPP
using namespace xercesc;
// First tree
XercesDOMParser* parser1 = new XercesDOMParser();
parser1->parse("file1.xml"); // Loading xml and building tree (XercesDOMParser owns the document)
DOMDocument* doc1 = parser1->getDocument();
DOMElement* el1 = doc1->getDocumentElement(); // Getting root
// Second tree
XercesDOMParser* parser2 = new XercesDOMParser();
parser2->parse("file2.xml"); // Loading xml and building tree (XercesDOMParser owns the document)
DOMDocument* doc2 = parser2->getDocument();
DOMElement* el2 = doc2->getDocumentElement(); // Getting root
Я хотел бы сделать это:
el2->appendChild(el1);
Так что последний XML в документе DOC2
<anotherroot>
<anothernode1>anothervalue1</anothernode1>
<anothernode2>anothervalue2</anothernode2>
<root>
<node1>value1</node1>
<node2>value2</node2>
</root>
</anotherroot>
Но при этом я получаю:
Завершение вызвано после того, как бросил экземпляр «xercesc_3_1 :: Domexception 'прерван
Я думаю, потому что Элемент, который я хочу прикрепить, принадлежит другому дереву. Анкет Как я могу достичь этого результата? Проблема, в основном, заключается в том, что у меня есть дерево и строка, содержащая сегмент XML. Мне нужно проанализировать строку, чтобы получить объект DOM, представляющий этот XML, и прикреплять к узлу другого дерева. Самое главное, что у меня есть строка с XML внутри ... Я не могу обойти это важное требование. Из строки, получение DOM и прикрепляя его. Кажется, это что -то невозможное ... возможно?
Как я могу это сделать??? Я действительно не могу принять тот факт, что программисты Xerces-C никогда не рассматривали такой сценарий и не предоставляли разумную функциональность для достижения такого решения.
Может быть, было бы достаточно, даже если бы я сказал мне, есть ли способ изменить ОС владения узлами на узел или элемент. Видите ли, есть неправильный_документ_ерр, который поднимается, когда то, что я пробовал раньше, выполняется. Что ж, если бы библиотека предоставила способ изменить право собственности на узел, чтобы она принадлежала другому документу, я был бы в порядке, и моя проблема была бы решена!
Спасибо
Решение
Domdocument :: importNode это Функция 2 -го уровня DOM Это было разработано для решения этой точной проблемы:
DOMElement * el1Imported = doc2->importNode(el1, true);
el2->appendChild(el1Imported); // element is now in right document