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

news/2025/10/8 14:44:06/文章来源:https://www.cnblogs.com/wzzkaifa/p/19129629

✅ 一、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.mzph.cn/news/931620.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asp网站开发需要什么网站建设 企业文化

来源&#xff1a;ScienceAI编辑&#xff1a;萝卜皮人类的大部分细胞中&#xff0c;每时每刻都在进行着各种复杂的转录过程&#xff1b;这一过程与后续的蛋白质合成息息相关&#xff0c;从而会影响人体中各类酶、抗体、激素、免疫因子等生物分子的产生&#xff0c;最终影响人的身…

详细介绍:Windows如何定制键盘按键

详细介绍:Windows如何定制键盘按键pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

台州网站建设系统江苏网站建设电话

要搭建一个标准的测量系统,需要考虑以下几个方面: 确定测量目的和需求:首先需要明确测量的目的和需求,例如测量长度、重量、体积等。同时需要考虑测量的精度和误差范围,以及测量系统的适用范围和条件等。选择合适的传感器:根据测量目的和需求,选择合适的传感器类型,例如…

TheHackersLabs Templo writeup

信息收集 nmap获取userFlag 去web看一下web上只有一个默认的index.html,通过gobuster扫一下目录 gobuster dir -u http://192.168.43.208/ -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt 有一个w…

卖花网站模板太原网站优化培训

1.rpm文件: 1.1安装rpm文件: rpm -ivh kde-select.rpm23 #--nodeps强制安装,无视环境缺少依赖的检查 rpm -ivh --nodeps kde-select.rpm #--force --replacefiles可以无视rpm的冲突去强制替换(如两个rpm的安装路径相同了会有冲突) rpm -ivh --nodeps --force --replacef…

深入解析:Oracle、PostgreSQL 与 MySQL 数据库对比分析与实践指南

深入解析:Oracle、PostgreSQL 与 MySQL 数据库对比分析与实践指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

PCIe扫盲——链路初始化与训练基础(三)之LTSSM

这一篇文章来简单地介绍一下链路训练状态机(Link Training and Status State Machine,LTSSM),并简要地介绍各个状态的作用和实现机制。 LTSSM有11个状态(其中又有多个子状态),分别是Detect、Polling、Configura…

嘉兴哪里可以做淘宝网站wordpress jquery异步请求

题目&#xff1a;洛谷P1850、UOJ#262、BZOJ4720、Vijos P2005。 题目大意&#xff1a;有n个时间段&#xff0c;第i个时间段只能在教室$c_i$上课&#xff0c;另一个上这门课的教室在$d_i$。现在你最多可以进行m次申请&#xff0c;对于第i个时间段的申请如果成功&#xff0c;那么…

#attrs

在 Vue 中,$attrs是一个核心的实例属性,用于处理 ​​父组件传递给子组件的非 Prop 属性​​。以下是其核心特性、使用场景及版本差异的详细解析: 一、核心概念​​定义​​ $attrs是一个对象,包含父组件传递给子组…

国庆比赛总结

没有摘要一些写在总结之前的话 感觉国庆这一段时间,真的是,疯狂挂分,每天感觉都在被完虐。然后也发现了很多不足吧,就是感觉自己其实大多数地方还是有很大问题的。 比赛 10/02 挂分最狠的一集 10/03 不会T2 10/04 …

记录第一个博客

工作几年了,才开始写博客,希望以后越来越好

PCIe扫盲——链路初始化与训练基础(二)

前面的文章中提到过,Ordered Sets分别有以下几种:TS1 and TS2 Ordered Set (TS1OS/TS2OS)、Electrical Idle Ordered Set (EIOS)、FTS Ordered Set (FTSOS)、SKP Ordered Set (SOS)和Electrical Idle Exit Ordered S…

2025 年 ppt 素材模板 /ppt 模板 ai 生成 /ppt 模板制作 /ppt 模版 / 课件 PPT 模板工具推荐:iSlide 技术优势与全场景服务能力解析

在数字化办公深入推进的当下,PPT 作为信息传递与展示的核心工具,其制作效率与设计质量直接影响工作成效。但多数职场人、教育工作者面临多重困境:缺乏专业设计能力导致成品粗糙,手动排版耗时耗力,模板素材版权不明…

课后作业1(01-方法)

一、请看以下代码,你发现了有什么特殊之处吗? 特殊之处:两个方法都叫 square。 一个参数是 int 类型,另一个是 double 类型。 虽然方法名相同,但参数类型不同,所以它们是重载关系。 编译器会根据传入的参数类型自…

WordPress站群 管理网站只能用ip访问网站

一、DNS简介一、DNS简介 DNS是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写&#xff0c;它是由域名解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址&#xff0c;并具有将域名转换为IP地址功能的服务器。其中域名必…

专业网站建设模块维护开发app制作公司

文章目录 1、前言2、在UG NX中创建草图,然后创建拉伸特征3、基于UFun函数的实现4、基于NXOpen的实现代码1、前言 UG NX是基于特征的三维建模软件,其中拉伸特征是一个很重要的特征,有读者问如何根据草图创建拉伸特征,我在这篇博客中讲述一下草图创建拉伸特征的UG NX二次开发…

做网站怎么加背景图片网站开发范围说明书

简介&#xff1a; 本文主要讲述了 iBatis 2.x 和 MyBatis 3.0.x 的区别&#xff0c;以及从 iBatis 向 MyBatis 移植时需要注意的地方。通过对本文的学习&#xff0c;读者基本能够了解 MyBatis 有哪些方面的改进&#xff0c;并能够顺利使用 MyBatis 进行开发。本文更适合有 iBat…

做网站全程指导wordpress免费资源模板

jSignature签名的用法1、先看看效果以后最后它是什么格式的2、先去下载该js3、下载以后就把它引入我们的HTML中4、看一下我的例子吧&#xff01;下期我们在讲&#xff0c;怎么把base64在后台处理&#xff0c;然后在存进我们指定的位置&#xff0c;以及怎么存数据库&#xff1b;…