gpt4 book ai didi

c++ - 将 Xerces-C DOMDocument 中的 Xerces-C DOMElement 附加到另一个 Xerces-C DOMDocument

转载 作者:行者123 更新时间:2023-11-28 08:24:04 28 4
gpt4 key购买 nike

我之前在 RapidXml 中询问过一个类似的问题,我现在想知道,相同但使用 Xerces-C。

我正在开发一个需要解析 xml 的 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>

但是这样做的时候我得到:

terminate called after throwing an instance of 'xercesc_3_1::DOMException' Aborted

我猜是因为我要附加的元素属于另一棵树。我怎样才能达到这个结果?基本上,问题是我有一棵树和一个包含 xml 段的字符串。我需要解析字符串获取表示该 xml 并附加到另一棵树的节点的 DOM 对象。最重要的是我有里面有 xml 的字符串……我不能绕过这个重要的要求。从字符串中获取 dom 并附加它。这似乎是不可能的……可能?

我该怎么做???我真的不能接受 Xerces-C 程序员从来没有想过这样的场景,也没有提供合理的功能来实现这样的解决方案。

也许这就足够了,即使我可以告诉我是否有一种方法可以更改节点或元素的节点所有权。你看,当执行我之前尝试的操作时会出现 WRONG_DOCUMENT_ERR。好吧,如果库提供了一种方法来更改节点的所有权以使其属于另一个文档,那我就没事了,我的问题也就解决了!

谢谢

最佳答案

DOMDocument::importNodeDOM Level 2 function旨在解决这个确切问题:

DOMElement * el1Imported = doc2->importNode(el1, true);
el2->appendChild(el1Imported); // element is now in right document

关于c++ - 将 Xerces-C DOMDocument 中的 Xerces-C DOMElement 附加到另一个 Xerces-C DOMDocument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4696653/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com