使用MSXML读写XML文件
使用MSXML读写XML文件
源代码:
- #include <iostream>
- #include <string>
- #include <cassert>
- #include <tchar.h>
- using namespace std;
- #import <msxml4.dll>
- using namespace MSXML2;
- BOOL CreateXmlFile(LPCTSTR lpszPath);
- BOOL QueryXmlFile(LPCTSTR lpszPath);
- const TCHAR szFile[] = _T("./smp.xml");
- int main()
- {
- //初始化COM库
- ::CoInitialize(NULL);
- if (!CreateXmlFile(szFile))
- {
- cout << "create xml file failed..." << endl;
- return 0;
- }
- MSXML2::IXMLDOMDocument2Ptr pDoc = NULL;
- HRESULT hr = NULL;
- hr = pDoc.CreateInstance(__uuidof(DOMDocument40));
- if (FAILED(hr))
- {
- cout << "failed to instantiate DOMDocument40 class" << endl;
- return 0;
- }
- if (VARIANT_TRUE != pDoc->load(szFile))
- {
- cout << "failed load xml data from file: " << static_cast<char*>(pDoc->parseError->Getreason()) << endl;
- return 0;
- }
- cout << static_cast<char*>(pDoc->xml) << endl;
- pDoc.Release();
- cout << "---------------------------------------------" << endl;
- cout << "start query..." << endl;
- QueryXmlFile(szFile);
- //反初始化COM库
- ::CoUninitialize();
- return 1;
- }
- ///
- // 创建Xml样例文件
- // lpszPath: xml文件的保存路径
- // return: 创建成功返回TRUE,否则返回FALSE
- ///
- BOOL CreateXmlFile(LPCTSTR lpszPath)
- {
- BOOL bRet = FALSE;
- HRESULT hr = S_FALSE;
- MSXML2::IXMLDOMDocument2Ptr pDoc = NULL;
- MSXML2::IXMLDOMElementPtr pParent = NULL;
- MSXML2::IXMLDOMElementPtr pChild = NULL;
- MSXML2::IXMLDOMProcessingInstructionPtr pPi;
- do
- {
- hr = pDoc.CreateInstance(__uuidof(DOMDocument40));
- if (FAILED(hr))
- {
- break;
- }
- pDoc->preserveWhiteSpace = VARIANT_TRUE;// 提供对white space node的支持
- //创建文件头
- pPi = pDoc->createProcessingInstruction("xml", "version=/"1.0/" encoding=/"utf-8/"");
- if (NULL == pPi)
- {
- break;
- }
- pDoc->appendChild(pPi);
- //创建注释
- MSXML2::IXMLDOMCommentPtr pComt = NULL;
- pComt = pDoc->createComment("Sample xml file create using xml dom object");
- if (NULL == pComt)
- {
- break;
- }
- pDoc->appendChild(pComt);
- //header
- pParent = pDoc->createElement("request");
- pDoc->appendChild(pParent);
- pParent->appendChild(pDoc->createTextNode("/n/t"));
- pChild = pDoc->createElement("username");
- pChild->text = "andylin";
- pParent->appendChild(pChild);
- pParent->appendChild(pDoc->createTextNode("/n/t/t"));
- pChild = pDoc->createElement("password");
- pChild->text = "pwd";
- pParent->appendChild(pChild);
- pParent->appendChild(pDoc->createTextNode("/n/t/t"));
- // pParent = pDoc->documentElement;
- pParent->appendChild(pDoc->createTextNode("/n/n/t"));
- //commands
- pChild = pDoc->createElement("cmdlines");
- MSXML2::IXMLDOMAttributePtr pAttr = NULL;
- pAttr = pDoc->createAttribute("count");
- pAttr->value = "2";
- pChild->setAttributeNode(pAttr);
- pAttr = pDoc->createAttribute("reply");
- pAttr->text = "no";
- pChild->setAttributeNode(pAttr);
- pChild->setAttribute("immediate", "yes");
- pAttr.Release();
- pParent->appendChild(pChild);
- pParent = pChild;
- //one group command
- pParent->appendChild(pDoc->createTextNode("/n/t/t"));
- pChild = pDoc->createElement("cmd");
- pChild->setAttribute("num", "1");
- pParent->appendChild(pChild);
- pParent = pChild;
- pParent->appendChild(pDoc->createTextNode("/n/t/t/t"));
- pChild = pDoc->createElement("type");
- pChild->text = "backup";
- pParent->appendChild(pChild);
- pParent->appendChild(pDoc->createTextNode("/n/t/t/t"));
- pChild = pDoc->createElement("dbname");
- pChild->text = "db14663";
- pParent->appendChild(pChild);
- pParent->appendChild(pDoc->createTextNode("/n/t/t"));
- pParent = pParent->parentNode;
- //another group command
- pParent->appendChild(pDoc->createTextNode("/n/t/t"));
- pChild = pDoc->createElement("cmd");
- pChild->setAttribute("num", "2");
- pParent->appendChild(pChild);
- pParent = pChild;
- pParent->appendChild(pDoc->createTextNode("/n/t/t/t"));
- pChild = pDoc->createElement("type");
- pChild->text = "save";
- pParent->appendChild(pChild);
- pParent->appendChild(pDoc->createTextNode("/n/t/t/t"));
- pChild = pDoc->createElement("data");
- //craet cdata
- MSXML2::IXMLDOMCDATASectionPtr pSec = NULL;
- pSec = pDoc->createCDATASection("这里是XML文档的CDATA数据段...");
- pChild->appendChild(pSec);
- pSec.Release();
- pParent->appendChild(pChild);
- pParent->appendChild(pDoc->createTextNode("/n/t/t"));
- pParent = pParent->parentNode;
- pParent->appendChild(pDoc->createTextNode("/n/t"));
- pParent = pParent->parentNode;
- pParent->appendChild(pDoc->createTextNode("/n"));
- pDoc->save(lpszPath);
- } while (0);
- if (pDoc)
- {
- pDoc.Release();
- pDoc = NULL;
- }
- if (pParent)
- {
- pParent.Release();
- pParent = NULL;
- }
- if (pChild)
- {
- pChild.Release();
- pChild = NULL;
- }
- return TRUE;
- }
- ///
- // 分析Xml样例文件
- // lpszPath: xml文件的路径
- // return: 分析成功返回TRUE,否则返回FALSE
- ///
- BOOL QueryXmlFile(LPCTSTR lpszPath)
- {
- BOOL bRet = FALSE;
- HRESULT hr = S_FALSE;
- MSXML2::IXMLDOMDocument2Ptr pDoc = NULL;
- MSXML2::IXMLDOMNodePtr pNode = NULL;
- do
- {
- hr = pDoc.CreateInstance(__uuidof(DOMDocument40));
- if (FAILED(hr))
- {
- break;
- }
- pDoc->async = VARIANT_FALSE;
- if (VARIANT_TRUE != pDoc->load(lpszPath))
- {
- break;
- }
- pNode = pDoc->selectSingleNode("/request/username");
- cout << "user name = " << static_cast<char*>(pNode->text) << endl;
- pNode = pDoc->selectSingleNode("/request/password");
- cout << "password = " << static_cast<char*>(pNode->text) << endl;
- pNode = pDoc->selectSingleNode("/request/cmdlines");
- MSXML2::IXMLDOMNamedNodeMapPtr pmapName = NULL;
- pmapName = pNode->attributes;
- pNode = pmapName->getNamedItem("count");
- cout << "count = " << static_cast<char*>(pNode->text) << endl;
- pNode = pmapName->getNamedItem("reply");
- cout << "reply = " << static_cast<char*>(pNode->text) << endl;
- pNode = pmapName->getNamedItem("immediate");
- cout << "immediate = " << static_cast<char*>(pNode->text) << endl;
- MSXML2::IXMLDOMNodeListPtr plsNode = NULL;
- plsNode = pDoc->selectNodes("/request/cmdlines/cmd");
- assert(2 == plsNode->length);
- cout << "cmd group 1: " << endl;
- pNode = plsNode->item[0]->selectSingleNode("type");
- cout << "type = " << static_cast<char*>(pNode->text) << endl;
- pNode = plsNode->item[0]->selectSingleNode("dbname");
- cout << "dbname = " << static_cast<char*>(pNode->text) << endl;
- cout << "cmd group 2: " << endl;
- pNode = plsNode->item[1]->selectSingleNode("type");
- cout << "type = " << static_cast<char*>(pNode->text) << endl;
- pNode = plsNode->item[1]->selectSingleNode("data");
- cout << "data = " << static_cast<char*>(pNode->text) << endl;
- } while (0);
- if (pDoc)
- {
- pDoc.Release();
- pDoc = NULL;
- }
- if (pNode)
- {
- pNode.Release();
- pNode = NULL;
- }
- return TRUE;
- }
生成的XML文件:
Sample xml file create using xml dom object
--> <script>f(clean);</script>
这里是XML文档的CDATA数据段...
]]> <script>f(clean);</script>
运行结果:
<?xml version="1.0"?>
<!--Sample xml file create using xml dom object-->
<request>
<username>andylin</username>
<password>pwd</password>
<cmdlines count="2" reply="no" immediate="yes">
<cmd num="1">
<type>backup</type>
<dbname>db14663</dbname>
</cmd>
<cmd num="2">
<type>save</type>
<data><![CDATA[这里是XML文档的CDATA数据段...]]></data>
</cmd>
</cmdlines>
</request>
---------------------------------------------
start query...
user name = andylin
password = pwd
count = 2
reply = no
immediate = yes
cmd group 1:
type = backup
dbname = db14663
cmd group 2:
type = save
data = 这里是XML文档的CDATA数据段...
Press any key to continue
使用MSXML读写XML文件相关推荐
- dom4j读写xml文件
dom4j读写xml文件 首先我们给出一段示例程序: import java.io.File; import java.io.FileWriter; import java.util.Iterator ...
- VC++ MSXML创建XML文件以及对XML文档解析
VC++ MSXML创建XML文件以及对XML文档解析 转自http://www.newxing.com/Tech/Program/Cpp/703.html // XmlCreationDemo.cp ...
- [转]C#读写xml文件
c#读写xml文件 已知有一个XML文件(bookstore.xml)如下: <?xml version="1.0" encoding="gb2312"? ...
- (3)[wp7数据存储] WP7 IsolatedStorage系列篇——通过XmlSerializer读写XML文件 [复制链接]...
发表于 2012-5-17 15:51:07 |只看该作者 |倒序浏览 分享到: 本帖最后由 agameboy 于 2012-5-17 17:08 编辑 这一篇我们会通过XmlSerializer读写 ...
- xml文件c语言读取函数,读写xml文件的2个小函数
#region 读写xml文件的2个小函数,2005 4 2 by hyc public void SetXmlFileValue(string xmlPath,string AppKey,strin ...
- java dom读写xml文件_java通过dom读写xml文件
java通过dom读写xml文件 要读的xml文件 encoding="GB2312"?> "男"> 李华姓名> 14年龄> 学生> ...
- Unity(C#)读写xml文件详解
目录 什么是xml文件? xml文件的结构 如何读写xml文件 什么是xml文件? xml文件是一种可拓展标记语言,由于简单易用,常被应用程序用于保存数据,unity也是如此,在我们需要控制读写用户的 ...
- Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件
Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...
- [QT操作XML]QT读写XML文件,QT修改XML文件
[QT操作XML]QT读写XML文件 XML简介 QT操作XML,写入.读取.修改 XML效果演示 XML简介 概念:Extensible Markup Language 可扩展标记语言(可扩展:标签 ...
最新文章
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL,spring获取context...
- 可转债数据一览表集思录_学习先进的可转债投资策略
- 如何开发利用计算机字体,如何利用PS来制作水纹特效字体
- MVP 2008全球峰会可预订宾馆,寻室友
- 30可以刷什么系统_刷脸支付系统可以对接原来的收银系统吗?
- [css] 你有使用过font-size-adjust属性吗?说说它的作用是什么?
- mocha 测试 mysql_GitHub - zouzhenxing/lei: 整合Express mysql ioredis ejs 的一开发框架,使用mocha对api进行测试...
- java布尔类型的调用_【Java学习笔记之八】JavaBean中布尔类型使用注意事项
- eclipse中提示“java application configureation name i”
- MyBatis学习笔记(4)-resultMap多对多映射使用总结
- 全网首发:MAC上运行SHELL脚本,typeset -l报错
- linux7配置永久路由,CentOS7添加永久静态路由
- 概率论与数理统计常用公式大全
- 关于logo1_.exe(威金病毒)蠕虫病毒的清楚,
- 快速给网站加一个赞赏码功能
- iReasoning MIB Browser显示中文乱码问题
- python处理FITS 3:处理头文件和数据单元
- 合作式智能运输系统车路协同云控系统V2X设备接入技术规范
- 压缩文件并删除源文件
- vue 实现 markdown书写博客 showdown
热门文章
- 天下贰的朋友们进来看下!!
- Java高并发秒杀API(三)之Web层
- Java中String和char、int相互转换
- Devops学习实践(三) jenkins集成findbugs
- html移除属性 jquery,Jquery添加删除属性、添加类
- 做网红营销可以给企业品牌带来哪些价值?
- 海贼王热血航线服务器维护,航海王热血航线连接服务器失败?解决方法一览
- 图解面试题:如何找到喜欢的电影?
- 蓝屏代码:0x000000ED:UNMOUNTABLE_BOOT_VOLUME 的解决方案
- Docker镜像文件使C盘爆满