首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Xerces-C DOMElement从Xerces-C DOMDocument附加到另一个

将Xerces-C DOMElement从Xerces-C DOMDocument附加到另一个
EN

Stack Overflow用户
提问于 2011-01-14 22:26:12
回答 1查看 3.2K关注 0票数 1

我之前询问过RapidXml中类似的问题,我想知道,现在,除了使用Xerces-C之外,我还想知道同样的情况。

我正在开发一个需要解析c++的应用程序。

请考虑以下几点:

xml文件: file1.xml

代码语言:javascript
复制
<root>
   <node1>value1</node1>
   <node2>value2</node2>
</root>

xml文件: file2.xml

代码语言:javascript
复制
<anotherroot>
   <anothernode1>anothervalue1</anothernode1>
   <anothernode2>anothervalue2</anothernode2>
</anotherroot>

我的cpp文件

代码语言:javascript
复制
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

我想这样做:

代码语言:javascript
复制
el2->appendChild(el1);

因此,文档doc2中的最终xml是

代码语言:javascript
复制
<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,它是在执行之前尝试的操作时引发的。如果库提供了一种方法来改变节点的所有权,使其属于另一个文档,我就会没事,我的问题就会得到解决!

谢谢你

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-15 14:06:47

DOMDocument::importNode是专为解决这个问题而设计的DOM二级函数

代码语言:javascript
复制
DOMElement * el1Imported = doc2->importNode(el1, true);
el2->appendChild(el1Imported); // element is now in right document
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4696653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档