提问人:DevPy 提问时间:8/19/2021 最后编辑:DevPy 更新时间:6/9/2022 访问量:393
使用 MSXML C++ 将另一个 XML 文件添加到现有 XML 文件
Add another XML file to existing XML file using MSXML C++
问:
我正在处理该项目,其中我使用 MSXML 分析器创建和分析 XML 文档。现有实现使用 CMarkup,它具有将另一个 XML 文档添加到现有文档的功能,但是当我尝试使用 MSXML 分析器时,它没有发生。addsubdoc(xmlfile)
有没有人对此有解决方案。
例如,我尝试过的:
CString str = L"<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n"
L"<Book>"
L"<Text>"
L"<Name>CPP</Name>"
L"<Author>Henry</Author>"
L"</Text>"
L"</Book>";
CString sub = L"<Text>"
L"<Name>5656</Name>"
L"<Author>Steve</Author>"
L"</Text>"
我想要的xml是:
<Book>
<Text>...</Text>
<Text>..New added..</Text>
</Book>
现在我想将 sub 添加到 str 中,使其在 Book 标签下自动添加。所以我做到了:
pXMLDom1->loadXML(_bstr_t(str));
pXMLDom2->loadXML(_bstr_t(sub));
// To get root node
CString root = (LPCSTR)pXMLDom1->GetfirstChild()->baseName;
pXMLDom1->selectSingleNode(root)->appendChild(pXMLDom2);
但它不添加数据。
要测试的示例代码:
#import <msxml6.dll>
#include "msxml2.h"
#include <iostream>
#include <atlstr.h>
void main()
{
MSXML2::IXMLDOMDocumentPtr pXMLDom1;
MSXML2::IXMLDOMDocumentPtr pXMLDom2;
HRESULT hr = pXMLDom.CreateInstance(__uuidof(MSXML2::DOMDocument60), NULL, CLSCTX_INPROC_SERVER);
HRESULT hr2 = pXMLDom2.CreateInstance(__uuidof(MSXML2::DOMDocument60), NULL, CLSCTX_INPROC_SERVER);
CString str = L"<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n"
L"<Book>"
L"<Text>"
L"<Name>CPP</Name>"
L"<Author>Henry</Author>"
L"</Text>"
L"</Book>";
CString sub = L"<Text>"
L"<Name>5656</Name>"
L"<Author>Steve</Author>"
L"</Text>";
pXMLDom1->loadXML(_bstr_t(str));
pXMLDom2->loadXML(_bstr_t(sub));
printf("Dynamically created DOM:\n%s\n", static_cast<PCSTR>(pXMLDom1->xml));
printf("Dynamically created DOM:\n%s\n", static_cast<PCSTR>(pXMLDom2->xml));
// To get root node
CString root = (LPCSTR)pXMLDom1->GetfirstChild()->baseName;
pXMLDom1->selectSingleNode(root)->appendChild(pXMLDom2);
printf("Merged XML:\n%s\n", static_cast<PCSTR>(pXMLDom1->xml));
}
答:
0赞
johv
6/9/2022
#1
试试这个:
pXMLDom1->documentElement->appendChild(pXMLDom2->documentElement)
或者,稍微修改一下代码:
CString root = (LPCSTR)pXMLDom1->documentElement;
pXMLDom1->selectSingleNode(root)->appendChild(pXMLDom2->documentElement);
另外,请注意,这会给你.pXMLDom1->GetfirstChild()->baseName
"xml"
评论
pXMLDom2->loadXML
sub
loadXml
pXMLDom2->selectSingleNode
pXMLDom1