【问题标题】:Merge two DOM documents using XERCES使用 XERCES 合并两个 DOM 文档
【发布时间】:2013-06-03 06:44:22
【问题描述】:

我只需要使用 xerces 将 1 个 xml 子树附加到另一个,

                DOMNode *tempNode;
                DOMElement *temp;
                DOMNode *paraNode;
                DOMNode *dest;

                XMLCh *xmlchElems = XMLString::transcode("lists");
                XMLCh *xmlchElem = XMLString::transcode("list1");

                DOMNodeList *mainElm1 = defDoc1->getElementsByTagName(xmlchElems);
                DOMNodeList *mainElm2 = defDoc2->getElementsByTagName(xmlchElems);

                DOMNodeList *defs1 = ((DOMElement*)(mainElm1->item(0)))->getElementsByTagName(xmlchElem);
                DOMNodeList *defs2 = ((DOMElement*)(mainElm2->item(0)))->getElementsByTagName(xmlchElem);

//
//   Merging starts here
//
                paraNode = mainElm2->item(0);
                tempNode = defs1->item(0);
                dest = defDoc1->importNode(tempNode, true);
                paraNode->appendChild(dest);

file1.xml

<file1>
<lists>
    <list1> </list1>
    <list2> </list2>
</lists>
</file1>

file2.xml

<file2>
<lists>
    <list1> </list1>
    <list2> </list2>
</lists>
</file2>

请建议应该用于此目的的 API。

【问题讨论】:

  • 使用 Xerces 您需要手动复制节点并将它们插入恕我直言的正确位置。更好的解决方案可能是使用简单的 XSLT 转换来合并文档。
  • 有没有其他方法可以做到这一点,XERCES 中没有任何其他 API 可以做到这一点吗???您能否建议我一些网站以实际开始使用 XSLT m new to it..
  • 我不知道 XERCES 中的 importNode() 方法,但实际上“合并”两个 XML 文档通常可能会更复杂,因为您涵盖了您的特定用例。如果您仍然对 XSLT 解决方案感兴趣,可以在这里找到一些示例:ibm.com/developerworks/library/x-tipcombxslt。网络上有很多关于 XSLT 的教程和参考资料,如果你想专业地使用 XML,你肯定应该了解 XSLT。
  • 嘿,谢谢,我一定会尝试 XSLT。 :)

标签: c++ xerces xerces-c


【解决方案1】:

嘿,我找到了一个简单的解决方案:

XMLCh * file1= XMLString::transcode("file1");
XMLCh * lists = XMLString::transcode("lists");

DOMNodeList* parNodeList1 = defDoc1->getElementsByTagName(lists);
DOMNodeList* parNodeList2 = defDoc2->getElementsByTagName(root);

DOMNode *defNode1 = parNodeList1->item(0);
DOMNode *defNode2 = parNodeList2->item(0);

temp = defDoc2->importNode(defNode1, true);
defNode2->appendChild(temp);

现在您可以编写 defDoc2,因为它是两个文件的合并。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多