我之前询问过RapidXml中类似的问题,我想知道,现在,除了使用Xerces-C之外,我还想知道同样的情况。
我正在开发一个需要解析c++的应用程序。
请考虑以下几点:
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);因此,文档doc2中的最终xml是
<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程序员从来没有想过这样的情况,也没有提供一个合理的功能来实现这样的解决方案。
也许就足够了,即使我告诉我是否有一种方法来改变节点所有权,os,节点还是元素。您看,有一个WRONG_DOCUMENT_ERR,它是在执行之前尝试的操作时引发的。如果库提供了一种方法来改变节点的所有权,使其属于另一个文档,我就会没事,我的问题就会得到解决!
谢谢你
发布于 2011-01-15 14:06:47
DOMDocument::importNode是专为解决这个问题而设计的DOM二级函数:
DOMElement * el1Imported = doc2->importNode(el1, true);
el2->appendChild(el1Imported); // element is now in right documenthttps://stackoverflow.com/questions/4696653
复制相似问题