当前位置: 首页 > news >正文

完整教程:基于 COM 的 XML 解析技术(MSXML) 的总结

✅ 一、COM 与 MSXML 简要说明

? 什么是 COM?

COM(Component Object Model)是一种 Windows 平台下的组件技术,可以实现在不重新编译代码的前提下复用组件。

特点:

? 什么是 MSXML?

MSXML(Microsoft XML Core Services)是微软提供的 COM 组件,用于 读取、操作和创建 XML 文档,通过 COM 接口如 IXMLDOMDocument, IXMLDOMNode 进行操作。

MSXML 常用版本:

  • MSXML3(最常见)

  • MSXML6(更安全,推荐)

对应头文件和库:

#include 
#import "msxml6.dll" raw_interfaces_only // 更现代的方式

✅ 二、典型 COM + MSXML 读取 XML 示例(含节点、属性)

示例:读取 FaceConfig.xml

#include <iostream>
#include <comdef.h>
#include <msxml2.h>#pragma comment(lib, "msxml6.lib") // 确保链接 MSXML6void ReadXmlViaCOM() {
::CoInitialize(NULL); // 初始化 COMIXMLDOMDocumentPtr pDoc;
HRESULT hr = pDoc.CreateInstance(__uuidof(DOMDocument60)); // 或 DOMDocument30
if (FAILED(hr)) {
std::cerr <
<
"创建 XML Document 实例失败\n";
return;
}VARIANT_BOOL success = VARIANT_FALSE;
pDoc->load(_variant_t(L"FaceConfig.xml"), &success);
if (!success) {
std::cerr <
<
"加载 XML 文件失败\n";
return;
}IXMLDOMNodePtr root;
pDoc->selectSingleNode(L"/faceconfig",
&root);if (root) {
IXMLDOMNamedNodeMapPtr attrs;
root->
get_attributes(&attrs);long attrLen = 0;
attrs->
get_length(&attrLen);for (long i = 0; i < attrLen; ++i) {
IXMLDOMNodePtr attrNode;
attrs->
get_item(i, &attrNode);
BSTR name, value;
attrNode->
get_nodeName(&name);
attrNode->
get_text(&
value);
std::wcout <
< name <
< L" = " <
<
value <
< std::endl;
SysFreeString(name);
SysFreeString(value);
}IXMLDOMNodeListPtr faceList;
root->selectNodes(L"face",
&faceList);
long count = 0;
faceList->
get_length(&
count);for (long i = 0; i <
count; ++i) {
IXMLDOMNodePtr faceNode;
faceList->
get_item(i, &faceNode);IXMLDOMNamedNodeMapPtr faceAttrs;
faceNode->
get_attributes(&faceAttrs);BSTR idVal = nullptr, tipVal = nullptr, fileVal = nullptr;
faceAttrs->getNamedItem(L"id")->
get_text(&idVal);
faceAttrs->getNamedItem(L"tip")->
get_text(&tipVal);
faceAttrs->getNamedItem(L"file")->
get_text(&fileVal);std::wcout <
< L"[face] id=" <
< idVal <
< L", tip=" <
< tipVal <
< L", file=" <
< fileVal <
< std::endl;SysFreeString(idVal);
SysFreeString(tipVal);
SysFreeString(fileVal);
}
}::CoUninitialize();
}

✅ 三、开发环境设置建议

✅ 如果你用的是 Visual Studio:

  1. 右键项目 → 属性 → C/C++ → 常规 → 附加包含目录
    加入 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include

  2. 链接器 → 输入 → 附加依赖项
    加入:msxml6.lib

  3. 确保系统安装了 MSXML6(大部分 Win10/11 系统默认包含)

✅ 四、你接下来能做的事

目的操作
✅ 读取 XML用上面示例即可
✅ 写入 XMLcreateElement + setAttribute + appendChild
✅ XPath 查询使用 selectNodesselectSingleNode
✅ 获取属性get_attributesgetNamedItem
✅ 中文支持控制台用 SetConsoleOutputCP(CP_UTF8),字符串处理时用 BSTR
✅ 做成封装类IXMLDOMDocumentPtr 封装为类:如 CXmlDocument

✅ 五、推荐资料

http://www.gsyq.cn/news/17302.html

相关文章:

  • PCIe扫盲——链路初始化与训练基础(二)
  • VMware ESXi 8.0U3g macOS Unlocker OEM BIOS 2.7 H3C 新华三 定制版
  • [计算机组成] 计算机字体文件及其运行原理
  • 滚动导航 - unique
  • C#基础:启用线程池执行并行任务
  • P1545 [USACO04DEC] Dividing the Path G 题解
  • java作业2
  • 关于PPT的课后作业
  • RK 系列 GPU 驱动检查方法
  • 算法第一章
  • mac打开app提示文件损坏解决方案
  • 考研系列—操作系统:冲刺笔记(1-3章) - 指南
  • 2025工业网线优质厂家最新推荐榜:品质卓越与技术领先之选
  • sg.Multiline 和 sg.Output 有什么区别?怎么看起来一样?
  • Syncfusion重构Essential Studio套件,为开发者提供更灵活选择
  • 2025 年逸发粘接认证推荐:依托德系标准与全链条服务,打造粘接及复材技术解决方案优质选择
  • Prj09--8088单板机C语言8253产生1KHz方波(1) - 详解
  • Rocky9系统Grub修复实验
  • Linux 与 Windows:哪个操作便捷的系统适合你?
  • 2025 年绞车源头厂家最新推荐榜:双速 / 回柱 / 张紧等设备优质直供企业,口碑与实力兼具!张紧/运输/凿井/矿用绞车厂家推荐
  • set 初始化
  • PCIe扫盲——链路初始化与训练基础(一)
  • 2025 波纹管生产厂家最新推荐榜:预应力 / 镀锌金属等品类精选,成都津钢领衔优质品牌清单
  • 2025 年国内废气处理厂商最新推荐排行榜:聚焦综合实力与服务能力,精选优质品牌助企业合规转型
  • 书缘幡云世界(1).众阳之阳.epub
  • 2025 年最新推荐铁附件实力厂家榜单:涵盖电力金具 / 热镀锌 / 线路 / 10 - 35KV 等多类型产品,助力工程方精准筛选优质合作企业
  • c++/c语音分号的使用情况
  • PCIe扫盲——物理层逻辑部分基础(三)
  • 2025 年景观石厂家最新推荐榜单:千层石 / 泰山石等各类景观石优质企业全方位解析及选购指南驳岸石/太湖石/龟纹石/草坪石景观石厂家推荐
  • 【Java】CopyOnWriteArrayList - 指南