写本文的目的是为了方便大家了解C++ MSXML操作方法。

当然,C++中对MSXML的调用有多种,本文采用的方法是完全参照MSXML SDK提供的文档进行操作。

如果有什么错误,欢迎指正。

代码框架是基于vs2008 MFC 对话框程序(UNICODE)。对话框程序需要读者自己创建。

#include <msxml6.h> #include <comutil.h> #pragma comment(lib, "comsuppwd.lib") void CXmlSampleDlg::OnBnClickedButton1()//按钮事件 { CoInitialize(NULL); CComPtr<IXMLDOMDocument> spXmldoc; HRESULT hr = spXmldoc.CoCreateInstance(L"MSXML2.DOMDocument.6.0"); if(SUCCEEDED(hr)) { VARIANT_BOOL isSuccessFul; CComVariant varXmlFile(L"a.xml"); spXmldoc->put_async(VARIANT_FALSE); HRESULT hr= spXmldoc->load(varXmlFile, &isSuccessFul); if(isSuccessFul==VARIANT_TRUE) { CComBSTR bstrXml; CComPtr<IXMLDOMElement> spRoot=NULL; CComPtr<IXMLDOMElement> spTheBook=NULL; CComPtr<IXMLDOMElement> spTheElem=NULL; CComPtr<IXMLDOMNode> spNewNode=NULL; hr = spXmldoc->get_documentElement(&spRoot); spRoot->get_xml(&bstrXml); AfxMessageBox(L"1, 原始的XML"); AfxMessageBox(bstrXml); spXmldoc->createElement(L"book", &spTheBook); spXmldoc->createElement(L"name", &spTheElem); spTheElem->put_text(L"新书"); spTheBook->appendChild(spTheElem, &spNewNode); spTheElem.Release(); spNewNode.Release(); spXmldoc->createElement(L"price", &spTheElem); spTheElem->put_text(L"20"); spTheBook->appendChild(spTheElem, &spNewNode); spTheElem.Release(); spNewNode.Release(); spXmldoc->createElement(L"memo", &spTheElem); spTheElem->put_text(L"新书的更好看。"); spTheBook->appendChild(spTheElem, &spNewNode); spNewNode.Release(); spTheElem.Release(); spRoot->appendChild(spTheBook, &spNewNode); spNewNode.Release(); spTheBook.Release(); spRoot->get_xml(&bstrXml); AfxMessageBox(L"2, 新建一本书完成"); AfxMessageBox(bstrXml); --- 新建一本书完成 ---- --- 下面对《哈里波特》做一些修改。 ---- --- 查询找《哈里波特》---- CComPtr<IXMLDOMNode> spTheNode=NULL; spRoot->selectSingleNode(L"/books/book[name='哈里波特']", &spTheNode); hr=spTheNode.QueryInterface(&spTheBook); spTheNode.Release(); spTheBook->get_xml(&bstrXml); AfxMessageBox(L"3,《哈里波特》的XML"); AfxMessageBox(bstrXml); --- 此时修改这本书的价格 ----- CComPtr<IXMLDOMNodeList> spNodeList=NULL; CComPtr<IXMLDOMNode> spListItem=NULL; spTheBook->get_childNodes(&spNodeList); spNodeList->get_item(1, &spListItem); spNodeList.Release(); spListItem->put_text(L"15"); --- 另外还想加一个属性id,值为B01 ---- CComVariant varId(L"B01"); spTheBook->setAttribute(L"id", varId); varId.Clear(); spTheBook->get_xml(&bstrXml); spTheBook.Release(); AfxMessageBox(L"4, 对《哈里波特》修改完成。"); AfxMessageBox(bstrXml); --- 对《哈里波特》修改完成。 ---- --- 要用id属性删除《三国演义》这本书 ---- spRoot->selectSingleNode(L"/books/book[@id='B02']", &spTheNode); hr=spTheNode.QueryInterface(&spTheBook); spTheNode.Release(); spTheBook->get_xml(&bstrXml); AfxMessageBox(L"5, 《三国演义》的XML"); AfxMessageBox(bstrXml); CComPtr<IXMLDOMNode> spParentNode=NULL; spTheBook->get_parentNode(&spParentNode); spParentNode->removeChild(spTheBook, &spTheNode); spTheNode.Release(); spParentNode.Release(); spTheBook.Release(); spRoot->get_xml(&bstrXml); AfxMessageBox(L"6, 删除《三国演义》后的XML"); AfxMessageBox(bstrXml); --- 再将所有价格低于10的书删除 ---- spRoot->selectNodes(L"/books/book[price<10]", &spNodeList); CComQIPtr<IXMLDOMSelection> spSomeBooks=spNodeList; spNodeList.Release(); spSomeBooks->removeAll(); spSomeBooks.Release(); spXmldoc->get_xml(&bstrXml); AfxMessageBox(L"7, 已经删除价格低于10的书"); AfxMessageBox(bstrXml); spRoot.Release(); bstrXml.Empty(); //spXmldoc->save(varXmlFile); //保存xml。 } varXmlFile.ClearToZero(); } spXmldoc.Release(); CoUninitialize(); }

a.xml

<?xml version="1.0" encoding="UTF-8"?> <books> <book> <name>哈里波特</name> <price>10</price> <memo>这是一本很好看的书。</memo> </book> <book id="B02"> <name>三国演义</name> <price>10</price> <memo>四大名著之一。</memo> </book> <book id="B03"> <name>水浒</name> <price>6</price> <memo>四大名著之一。</memo> </book> <book id="B04"> <name>红楼</name> <price>5</price> <memo>四大名著之一。</memo> </book> </books>

C++ 操作XML的完整例子——MSXML篇相关推荐

  1. (转)C#操作XML的完整例子——XmlDocument篇

    这是一个用c#控制台程序下, 用XmlDocument 进行XML操作的的例子,包含了查询.增加.修改.删除.保存的基本操作.较完整的描述了一个XML的整个操作流程.适合刚入门.net XML操作的朋 ...

  2. C#操作XML的完整例子——XmlDocument篇

    这是一个用c#控制台程序下,  用XmlDocument 进行XML操作的的例子,包含了查询.增加.修改.删除.保存的基本操作.较完整的描述了一个XML的整个操作流程.适合刚入门.net XML操作的 ...

  3. MSXML操作XML的完整例子

    许多新手对MSXML如何操作XML不太了解.我下面把一些常用的操作整理成一个例子,供大家参考. 假设XML文件名:test.xml <?xml version="1.0" e ...

  4. [Qt教程] 第28篇 XML(二)使用DOM创建和操作XML文档

    [Qt教程] 第28篇 XML(二)使用DOM创建和操作XML文档 楼主  发表于 2013-5-21 22:00:51 | 查看: 475| 回复: 0 使用DOM创建和操作XML文档 版权声明 该 ...

  5. C#操作xml完整类文件

    C#操作xml完整类文件 xml_oper.cs using ...System; using System.Data; using System.Web; using System.Xml; /** ...

  6. .net下操作XML的几篇文章(downmoon收集自MSDN)

    1.通过 XML 发布新闻 http://msdn.microsoft.com/zh-cn/library/ms947599.aspx 2.真实世界的 XML:使用 .NET 框架中集成的读取器和写入 ...

  7. VC++中操作XML(MFC、SDK)

    VC++中操作XML(MFC.SDK) XML在Win32程序方面应该没有在Web方面应用得多,很多Win32程序也只是用XML来存存配置信息而已,而且没有足够的好处的话还不如用ini.VC++里操作 ...

  8. jquery中ajax完整例子get,jq的ajax方法,jquery中ajax完整例子

    jq的ajax方法,jquery中ajax完整例子 相较与js异步对象的繁琐,jq的ajax对象结构更加清晰 一:ajax对象简述 ajax(Asynchronous JavaScript and X ...

  9. java 解析/操作 xml 几种常用方式 xml的增加/删除/修改

    java 解析/操作 xml 几种常用方式 xml的增加/删除/修改 首先,我们先介绍几种常用的xml解析器. 1. 介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方 ...

最新文章

  1. 算法分析 载货问题_协会发布 | 汽车市场走势分析及2021年预测报告
  2. Putty常用属性设置
  3. java编写自动化脚本生成apk_Unity3D研究院之Android全自动打包生成apk(六十九)
  4. css 让div 的高度和屏幕的高度一样
  5. c语言编译无错误但不能输入输出,第2章-C语言版输入输出.ppt
  6. C#下如何实现服务器 + 客户端的聊天程序
  7. 【LeetCode笔记】112 113. 路径总和 I II(Java、递归、DFS)
  8. 太原工业学院单片机课程设计_单片机智能小车毕业设计论文
  9. verp之增加接近传感器(proximity sensor)
  10. H3C 路由过滤与路由引入
  11. rsync 服务端和客户端 简单配置
  12. 0.05‱的人生赢家!我们昨天仰视的学霸,今天又成了千亿富豪!
  13. 开传奇需要什么技术要什么条件
  14. QQ空间自动点赞脚本1
  15. 【面试】剑指OFFER
  16. redis数据库指令
  17. cordova获取手机IMEI
  18. 谈谈在项目过程中的发生争论与争吵
  19. java.sql.SQLException: ORA-00600: 内部错误代码解决
  20. 静态英雄联盟轮播图布局

热门文章

  1. java bulk_ElasticSearch-javaAPI-Bulk批量操作
  2. 牛客多校第十场F-Popping Balloons
  3. BABvsBABAB
  4. 加解密杂烩程序开发(三)
  5. 首款鸿蒙手机,华为首款鸿蒙手机入网:不是P50系列
  6. 一日之计在于晨,晨跑带来的不止是健康,还有乐观积极的人生态度
  7. 根据网络上的视频的m3u8文件通过ffmpeg进行合成视频
  8. freemaker生成doc文档(特殊字符导致异常)
  9. volatile的指令重排序理解
  10. 网络编程——UDP协议的实践(词典翻译服务器(英译汉))