c++ - 使用 MSXML C++ 将另一个 XML 文件添加到现有 XML 文件
问题描述
我正在研究这个项目,我正在使用 MSXML 解析器来创建和解析 XML 文档。现有实现使用 CMarkup 并且它具有将另一个 XML 文档添加到现有文档的功能,addsubdoc(xmlfile)
但是当我尝试使用 MSXML 解析器时它没有发生。
有没有人对此有解决方案。
例如我尝试过的:
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>
现在我想以一种在 Book 标签下自动添加的方式将 sub 添加到 str 中。所以我做了:
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));
}
解决方案
推荐阅读
- android - Settings.Secure.Android_ID 可以为空吗?
- php - 当点击喜欢按钮时,使用 ajax 更改磁带中帖子的点赞数
- sql - 找到最畅销的
- r - 在 R 中修复裁剪的 Kable 图像
- graphql - 盖茨比页面中的 GraphQL 依赖查询
- google-sheets - 按月、按笼子查询费用、汇总和总和
- android - 在布局和通知栏中都有 Exoplayer 控件?
- php - 全新安装后未加载 Laravel Spark 注册视图
- c++ - Vector assign() 导致 back() 出现问题
- powershell - Powershell 按 MM/DD/YY、HH:MM AM/PM 排序