//解析xml XmlParsingDemo.cpp#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>
#include <MsXml.h>
// 引入MSXML解析器
#import <msxml3.dll>
using namespace MSXML2;class InitializeCom
{
public:InitializeCom()  {       CoInitialize(NULL); }// Initializes the COM library }~InitializeCom() {     CoUninitialize(); }// Closes the COM library    }
}InitCom;enum MytagDOMNodeType
{NODE_INVALID0 = 0,NODE_ELEMENT1 = 1,NODE_ATTRIBUTE2 = 2,NODE_TEXT3 = 3,NODE_CDATA_SECTION4 = 4,NODE_ENTITY_REFERENCE5 = 5,NODE_ENTITY6 = 6,NODE_PROCESSING_INSTRUCTION7 = 7,NODE_COMMENT8 = 8,NODE_DOCUMENT9 = 9,NODE_DOCUMENT_TYPE10 = 10,NODE_DOCUMENT_FRAGMENT11 = 11,NODE_NOTATION12 = 12
};int main()
{char *szXmlFile = "E://china.xml"; //上篇创建的xml文档MSXML2::IXMLDOMDocumentPtr pDoc = NULL; // xml文档MSXML2::IXMLDOMNodeListPtr pNodeList = NULL; // 节点链表MSXML2::IXMLDOMElementPtr pRootElement = NULL, pElement = NULL; // 根节点(元素)MSXML2::IXMLDOMNodePtr pNode = NULL, pNode1 = NULL; // 节点MSXML2::IXMLDOMNamedNodeMapPtr pAttrList = NULL; // 属性链表MSXML2::IXMLDOMAttributePtr pAttrNode = NULL; // 属性long lChilds, lAttr, i;HRESULT hr = pDoc.CreateInstance(__uuidof(DOMDocument30));if (FAILED(hr)){printf("无法创建DOMDocument40对象,请检查是否安装并初始化了MsXml Parser库!");return EXIT_FAILURE;}VARIANT_BOOL bXmlLoad = pDoc->load((_variant_t)szXmlFile);if (!bXmlLoad) // 加载失败{printf("加载%s失败!\n", szXmlFile);return EXIT_FAILURE;}// (1)根节点pRootElement = pDoc->GetdocumentElement();printf("root = %s\n", (char*)pRootElement->GetnodeName()); // pRootElement->nodeName// (2)根节点的一级子节点pNodeList = pRootElement->GetchildNodes(); // pRootElement->childNodeslChilds = pNodeList->Getlength(); // pNodeList->lengthfor (i = 0; i < lChilds; i++){pNode = pNodeList->Getitem(i); // pNodeList->item[i]if (pNode->GetnodeType() !=NODE_COMMENT8) // 过滤注释节点{printf("child[%d] of [%s]: [%s]\n", i ,(char*)pRootElement->GetnodeName(), (char*)pNode->GetnodeName());}}// (3)统计文档中所有的<Population>节点pNodeList = pDoc->getElementsByTagName((_bstr_t)(char*)"Population");lChilds = pNodeList->Getlength();printf("文档中[Population]共有%d个\n", lChilds);// (4)根节点下的<Population>节点pNode = pRootElement->selectSingleNode((_bstr_t)(char*)"Population");// 已知根节点为<China>时:pNode = pDoc->selectSingleNode((_bstr_t)(char*)"China//Population");printf("根节点下的[Population]子节点值为%s\n", (char*)pNode->Gettext());pAttrList = pNode->Getattributes();lAttr = pAttrList->Getlength();for (i = 0; i < lAttr; i++){pAttrNode = pAttrList->Getitem(i);printf("Attr[%d] of [%s]: %s = %s\n", i, (char*)pNode->GetnodeName(), (char*)pAttrNode->GetnodeName(), (char*)pAttrNode->Gettext());}// (5)查找节点<Municipality>下的所有子节点// "//"表示在任意一层寻找Municipality;"//*"查找<Municipality></Municipality>中的所有子节点pNodeList = pDoc->selectNodes((_bstr_t)(char*)"//Municipality//*"); // 这里可将pDoc换成pRootElementwhile (pNode = pNodeList->nextNode()){printf("childs of [Municipality]: %s\n", (char*)pNode->GetnodeName());}// (6)查找节点<Municipality>下的一级子节点pNode = pRootElement->selectSingleNode((_bstr_t)(char*)"Municipality");pNodeList = pNode->GetchildNodes();lChilds = pNodeList->Getlength();for (i = 0; i < lChilds; i++){pNode1 = pNodeList->Getitem(i); // pNodeList->item[i]printf("child[%d] of [Municipality]: %s\n", i, (char*)pNode1->GetnodeName());}// (7)查询父、子、兄、弟节点pNode = pRootElement->selectSingleNode((_bstr_t)(char*)"//TianJin");pNode1 = pNode->GetparentNode(); // 父节点printf("[TianJin]的父节点为[%s]\n", (char*)pNode1->GetnodeName());pNodeList = pNode->GetchildNodes(); // 子节点lChilds = pNodeList->Getlength();for (i = 0; i < lChilds; i++){pNode1 = pNodeList->nextNode();printf("child[%d] of [TianJin]: %s\n", i, (char*)pNode1->GetnodeName());}pNode1 = pNode->GetpreviousSibling(); // 兄节点printf("[TianJin]的兄节点为[%s]\n", (char*)pNode1->GetnodeName());pNode1 = pNode->GetnextSibling(); // 弟节点printf("[TianJin]的弟节点为[%s]\n", (char*)pNode1->GetnodeName());return EXIT_SUCCESS;
}

// 创建xml XmlCreationDemo.cpp#include <stdlib.h>
#include <stdio.h>// 引入MSXML解析器
#import <msxml3.dll>
using namespace MSXML2;class InitializeCom
{
public:InitializeCom()  {   CoInitialize(NULL); }~InitializeCom() { CoUninitialize();   }
}InitCom;int main()
{char *szXmlFile = "E://china.xml"; // xml文件MSXML2::IXMLDOMDocumentPtr pDoc = NULL; // xml文档MSXML2::IXMLDOMProcessingInstructionPtr pProInstruction = NULL; // xml声明MSXML2::IXMLDOMCommentPtr pComment = NULL; // 注释MSXML2::IXMLDOMElementPtr pRootElement = NULL, pElement = NULL; // 根节点(元素)MSXML2::IXMLDOMNodePtr pNode = NULL, pNode1 = NULL, pNode2 = NULL; // 节点MSXML2::IXMLDOMAttributePtr pAttrNode = NULL; // 属性HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30)); //if (FAILED(hr)){printf("无法创建DOMDocument40对象,请检查是否安装并初始化了MsXml Parser库!");return EXIT_FAILURE;}// (1)创建xml文档声明(或insertBefore根节点)pProInstruction = pDoc->createProcessingInstruction((_bstr_t)(char*)"xml", (_bstr_t)(char*)"version=\"1.0\" encoding=\"utf-8\""); pDoc->appendChild((MSXML2::IXMLDOMNode*)pProInstruction);// (2)创建根节点<China>pRootElement =  pDoc->createElement((_bstr_t)(char*)"China");   pDoc->PutRefdocumentElement(pRootElement); // pXMLDomDoc->documentElement = pRootElement;// (3)创建节点<China><Continent>    pComment = pDoc->createComment((_bstr_t)(char*)"所在的洲");pRootElement->appendChild((MSXML2::IXMLDOMNode*)pComment); // 注释pNode = pDoc->createNode((_variant_t)(long)MSXML2::NODE_ELEMENT, (_bstr_t)(char*)"Continent", (_bstr_t)(char*)"");pNode->Puttext((_bstr_t)(char*)"Asia"); // pNode->text = "Asia";pRootElement->appendChild(pNode); // 节点// (4)创建节点<China><Population>pComment = pDoc->createComment((_bstr_t)(char*)"人口数量");pRootElement->appendChild((MSXML2::IXMLDOMNode*)pComment); // 注释pElement = pDoc->createElement((_bstr_t)(char*)"Population");pAttrNode = pDoc->createAttribute((_bstr_t)(char*)"Units");pAttrNode->Puttext((_bstr_t)(char*)"Million Person");pElement->setAttributeNode(pAttrNode); // 统计单位pElement->setAttribute((_bstr_t)(char*)"StatisticalYear", (_variant_t)(char*)"2000"); // 统计年份pElement->Puttext((_bstr_t)(char*)"1,296");pRootElement->appendChild(pElement); // 节点// (5)创建节点<China><Municipality>pComment = pDoc->createComment((_bstr_t)(char*)"四个直辖市");pRootElement->appendChild((MSXML2::IXMLDOMNode*)pComment); // 注释pNode = pDoc->createNode((_variant_t)(long)MSXML2::NODE_ELEMENT, (_bstr_t)(char*)"Municipality", (_bstr_t)(char*)"");pRootElement->appendChild(pNode); // 节点// (6)创建节点<China><Municipality><TianJin>pNode1 = pDoc->createNode((_variant_t)(long)MSXML2::NODE_ELEMENT, (_bstr_t)(char*)"TianJin", (_bstr_t)(char*)"");//    创建节点<China><Municipality><TianJin><Area>pElement = pDoc->createElement((_bstr_t)(char*)"Area");pElement->setAttribute((_bstr_t)(char*)"Units", (_variant_t)(char*)"Thousand Square kilometers"); // 统计单位pElement->Puttext((_bstr_t)(char*)"12");pNode1->appendChild((MSXML2::IXMLDOMNode*)pElement); // 节点//    创建节点<China><Municipality><TianJin><Population>pElement = pDoc->createElement((_bstr_t)(char*)"Population");pElement->setAttribute((_bstr_t)(char*)"Units", (_variant_t)(char*)"Million Person"); // 统计单位pElement->setAttribute((_bstr_t)(char*)"StatisticalYear", (_variant_t)(char*)"2000"); // 统计年份pElement->Puttext((_bstr_t)(char*)"10.01");pNode1->appendChild((MSXML2::IXMLDOMNode*)pElement); // 节点pNode->appendChild(pNode1);// (7)创建节点<China><Municipality><BeiJing>并插入<TianJin>前pNode2 = pDoc->createNode((_variant_t)(long)MSXML2::NODE_ELEMENT, (_bstr_t)(char*)"BeiJing", (_bstr_t)(char*)"");//    创建节点<China><Municipality><BeiJing><Area>pElement = pDoc->createElement((_bstr_t)(char*)"Area");pElement->setAttribute((_bstr_t)(char*)"Units", (_variant_t)(char*)"Thousand Square kilometers"); // 统计单位pElement->Puttext((_bstr_t)(char*)"17");pNode2->appendChild((MSXML2::IXMLDOMNode*)pElement); // 节点//    创建节点<China><Municipality><BeiJing><Population>pElement = pDoc->createElement((_bstr_t)(char*)"Population");pElement->setAttribute((_bstr_t)(char*)"Units", (_variant_t)(char*)"Million Person"); // 统计单位pElement->setAttribute((_bstr_t)(char*)"StatisticalYear", (_variant_t)(char*)"2000"); // 统计年份pElement->Puttext((_bstr_t)(char*)"13.82");pNode2->appendChild((MSXML2::IXMLDOMNode*)pElement); // 节点pNode->insertBefore(pNode2, (_variant_t)(IDispatch*)pNode1);//// (8)创建节点<China><Municipality><ShangHai>// (9)创建节点<China><Municipality><ChongQing>pDoc->save((_variant_t)szXmlFile);return EXIT_SUCCESS;
}

MsXml创建和解析XML示例相关推荐

  1. android dom4j包,Android 创建与解析XML(五)—— Dom4j方式

    1.Dom4j概述 dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the J ...

  2. Android 创建与解析XML(一)—— 概述

    Android 是最常用的智能手机平台,XML 是数据交换的标准媒介,Android 中可以使用标准的XML生成器.解析器.转换器 API,对 XML 进行解析和转换. XML,相关有DOM.SAX. ...

  3. python解析xml文件elementtree_Python中使用ElementTree解析XML示例

    [XML基本概念介绍] XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. 概念一: 复制代码 代码如下: # foo元素的起始标签 ...

  4. 【C#】创建、解析 xml 文件(XmlDocument 方式)

    前言 本文使用 System.Xml 中的 XmlDocument 解析 xml 格式的文件.另外,由于我是粗略的看了下官方文档和一些博客,可能会有许多错误的地方,望指出. 官方文档:https:// ...

  5. 使用jdk DOM,SAX和第三方jar包DOM4J创建,解析xml文件

    xml的创建,解析 1. 什么是xml文件 1.1 什么是xml文件 1.2 解析xml的方式,优缺点 2. 使用dom操作xml文件 2.1 使用dom创建xml文件 2.2 使用dom解析xml文 ...

  6. PHP创建与解析 XML 1 (36)

    一.使用SimpleXML操控XML 要处理XML 文件,有两种传统的处理思路:SAX 和DOM.SAX 基于事件触发机制,对XML 文件进行一次扫描,完成要进行的处理:DOM 则将整个XML 文件构 ...

  7. PHP 创建与解析 XML

    //使用SimpleXML控制xml //注意空格 $_xml =<<<xml <?xml version="1.0" encoding="utf ...

  8. dom4j创建、解析xml文件(增删改查)

    先对xml文件进行解析,xml文件如下图所示 <?xml version="1.0" encoding="UTF-8"?> <?eclipse ...

  9. PLSQL 解析XML示例2

    1:PLSQL解析有嵌套的复杂XML数据,xml数据格式如下: <ns1:IncreaseCreditAfterRemittance xmlns:ns1="http://tempuri ...

  10. Qt解析XML及QTableWidget用法示例

    #include "widget.h" #include "ui_widget.h" #include <QFile> #include <Q ...

最新文章

  1. vue读取redis 值_Jmeter连接Redis,一定很容易学会吧
  2. 用于参考的学生信息管理系统(数据库简单 可自己参考创建)
  3. Java按照时间顺序从hbase中读出数据
  4. X-Pack Spark归档POLARDB数据做分析
  5. Collectiont和Collections的区别
  6. [Javascript]史上最短的IE浏览器判断代码
  7. ARP的***与防护
  8. Go 标准库介绍五: io
  9. js 多维数组 应用
  10. newifimini出厂固件_新路由newifi固件
  11. Unit firewalld.service could not be found
  12. arcgis for javascript 4.18 添加图片到地图(可用于实现雷达图片上图)
  13. linux存储实用程序育儿法下载,Linux版utorrent的使用.doc
  14. 删除hive的分区元数据,spark总是读取到已经删掉的分区
  15. 上传声音 微信小程序_微信小程序录音文件保存,播放
  16. 美加净与大白兔跨界合作奶糖味润唇膏成社交网络爆款
  17. GGNN:GATED GRAPH SEQUENCE NEURAL NETWORKS
  18. 主从库理论知识-主从同步如何实现?
  19. 慕课面板数据分析与Stata应用—第一章总结
  20. Linux查看本机局域网IP命令

热门文章

  1. innerHTMLinnerText区别
  2. linux系统服务器日志,linux系统日志及日志服务器
  3. word 目录格式调整
  4. 【POJ No. 3294】星际迷航 Life Forms
  5. 股票学习-量柱和k线-第一天
  6. MySQL8.0安装踩坑记录
  7. iOS_6_ToolBar+xib+红楼梦
  8. 全球股市暴跌,币圈应声跳水,为什么?
  9. 计算机WIN7动态硬盘分区,如何创建Win7虚拟磁盘分区
  10. 信息学奥赛一本通 1247:河中跳房子 | OpenJudge NOI 1.11 10:河中跳房子 | 洛谷 P2855 [USACO06DEC]River Hopscotch S