转载:VC DOM 操作XML

C++ XML文件读取 C++快速读取XML文件 阅读详情

操作XML有两种方法:一种是DOM 另一种是ASX 这两种的区别在于:DOM在读取XML文档时要把整个文件都放入内存,然后形成一个完整的DOM树,然后再解析.因此,DOM对于大型文件常常力不从心.而ASX则是读取一行解析一行,不必把所有内容都放入内存.因此适合大型文件的读取.

 

这不,最近自己也遇到这方面的问题.硬着头皮把别人的代码阅读了一遍,基本掌握了创建 获取XML文档的流程.现介绍如下:

 

1.在你的APP类里面的InitInstance()函数里面添加函数AfxOleInit();进行COM口初始化

 

2.在具体实现的函数前面引入用于解释XML的dll 代码:#import "msxml4.dll"

 

2.创建XML

 

   1).声明并创建一个DOM对象

 

     首先声明一个指向DOM对象的智能指针: MSXML2::IXMLDOMDocumentPtr pDoc;

 

       再声明一个指向根节点的智能指针:      MSXML2::IXMLDOMElementPtr xmlRoot;

 

<附注:智能指针 类似于一个对象,在应用程序关闭之后,可以自动释放指针指向的那部分空间,好象一个类默认就有构造函数和析构函数一样.这样可以防止程序员的疏忽造成内存泄露>

 

   然后开始创建DOM对象:HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));

 

创建根节点:     pDoc->raw_createElement((_bstr_t)(char*)"china", &xmlRoot);

 

pDoc->raw_appendChild(xmlRoot, NULL);

 

2):添加子节点并赋值

 

MSXML2::IXMLDOMElementPtr childNode; //声明一个指向子节点的智能指针       

pDoc->raw_createElement((_bstr_t)(char*)"City", &childNode);//dom对象创建这个节点并赋值

 

//////////////////////////////////////1/////////////////////////////////

 

为节点赋值: childNode->Puttext("WuHan");

 

childNode->setAttribute("population","8,000,000");//属性名,属性值

 

childNode->setAttribute("area","10000");//属性名 属性值

xmlRoot->appendChild(childNode);//将该节点加入根节点下面,使它成为根节点的子节点

 

同样道理:再加两个类似的子节点并分别赋值

 

//////////////////////////////////2//////////////////////////////////////

 

pDoc->raw_createElement((_bstr_t)(char*)"City", &childNode);

childNode->Puttext("ShangHai");

childNode->setAttribute("population","12,000,000");

childNode->setAttribute("area","12000");

xmlRoot->appendChild(childNode);

/////////////////////////////3//////////////////////////////////////// 

pDoc->raw_createElement((_bstr_t)(char*)"City", &childNode);

childNode->Puttext("ChengDu");

childNode->setAttribute("population","13,000,000");

childNode->setAttribute("area","15000");

xmlRoot->appendChild(childNode);

 

////////////////////////保存到文件/////////////////////////

 

pDoc->save("f://he.xml");   //如果不存在就建立,存在就覆盖

 

到这里就完成了创建一个XML的全部过程,接下来看读取

 

////////////////////////////////////////读取///////////////////////////////////

 

1.同创建 也要先声明一个DOM 对象

 

MSXML2::IXMLDOMDocumentPtr pDoc; 

HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));

if(!SUCCEEDED(hr)) 

{                

   MessageBox("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!"); 

   return;

}

 

2.加载文件//////////////////////////////////////////////////////////////////

 

pDoc->load("f://he.xml");

 

3.读取///////////////

 

CString str1;

MSXML2::IXMLDOMElementPtr childNode ;//先声明子节点的指针

 

MSXML2::IXMLDOMNamedNodeMapPtr pAttrs = NULL; 

MSXML2::IXMLDOMNodePtr pAttrItem;

 

long nCount ;

for (int j = 0 ;j < 3;j++)

{

   str1.Format("//City[%d]",j);

   //在树中查找名为City的节点,"//"表示在任意一层查找

   childNode = (MSXML2::IXMLDOMElementPtr)(pDoc->selectSingleNode((_bstr_t)str1));

 

   //得到节点类型

   MSXML2::DOMNodeType nodeType;

   childNode->get_nodeType(&nodeType);

 

   //节点名称

   BSTR var;

   CString name;

   childNode->get_nodeName(&var);

   name = (char*)(_bstr_t)var;

 

   //节点值

   VARIANT varVal;

   childNode->get_nodeTypedValue(&varVal);

   CString strValue = (char*)(_bstr_t)varVal;

 

   //节点属性,放在链表中

   childNode->get_attributes(&pAttrs);

   pAttrs->get_length(&nCount);

   for(int i = 0 ; i < nCount ; i++)

   {                 

    pAttrs->get_item(i,&pAttrItem);

    //我们可以通过函数get_nodeName,get_nodeTypedValue得到属性名和属性值

    //也可以直接得到

    CString strAttrName   = (char*)(_bstr_t)pAttrItem->nodeName;

    CString strAttrValue = (char*)(_bstr_t)pAttrItem->nodeTypedValue;

    CString temp;

    temp.Format("%s/t%s/t%s",strValue,strAttrName,strAttrValue);

    AfxMessageBox(temp);

   }

}

 

转载地址:http://hi.baidu.com/strongpig/blog/item/7e186c3eb232e13370cf6c3d.html

VC++中使用MSXML组件解析XML文件 本文还有配套的精品资源,点击获取 简介:在VC++开发环境中,使用MSXML组件可以有效地读取操作XML文件。MSXML组件允许开发者通过COM接口与XML文档交互,支持创建 IXMLDOMDocument 对象来加载和解析XML数据。本文介绍如何通过包含 msxml2.h 头文件,链接 msxml2.lib 或 msxm... 阅读详情

相关推荐

VC DOM对象枚举当前网页表单元素值.rar

VC DOM对象枚举当前网页表单元素值,枚举当前最顶层显示的网页中,所有的表单元素,包括值信息,以CMD控制台窗口的形式返回枚举结果,如演示截图所示,打开百度置于顶层窗口,程序即可开始枚举百度首页中的表单元素。

C/C++读写xml文件

MSXML2::IXMLDOMDocumentPtr pDoc; MSXML2::IXMLDOMElementPtr  xmlRoot ;  // 创建DOMDocument对象  HRESULT hr  =  pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));  if ( ! SUCCEEDED(hr))   {

7389

VC读写XML文件

VC 使用msxml3.dll或msxml6.dll动态链接库中的函数读写XML文件。配套博文解说http://blog.csdn.net/qq2399431200/article/details/17583171

vc中的xml文件读取操作

读取xml1、在stdafx.h中引用如下#include "TLH/msxml4.tlh" using namespace MSXML22、在app文件中注意初始化com#if _WIN32_WINNT >= 0x0400 HRESULT hRes = CoInitializeEx(NULL, COINIT_MULTITHREADED);#else HRESULT hRes = CoInit

gishjl的专栏 3770

浅析虚拟DOM

对于我们学习vue和react框架的童鞋们来说,虚拟DOM绝不是一个生疏的东西,对于我们使用的MVVM(m:是model层;v:是视图层;vm:是model层和view层中间的一个映射层)渲染中虚拟DOM常常被使用到,但具体是如何使用的,我们却不是很清楚,现在我将跟大家说说我的理解。 什么是虚拟DOM 虚拟DOM就是我们真实的JS对象, ...

bokenice的博客 370

vc++中读取xml

vc++中读取xml有几种方式,可视tinyxml算是最简单的了为了大家更方便的使用,简述一下过程,有问题可以留言:1、下载tinyxmltinyxml,自己在里面找找解压后包括两部分,tinyxml和一个静态链接库文件xmladapter.lib2、使用tinyxml通常需要把它包含到自己的工程文件中去,可是你也可以选择以下的方式:a、project->settings-

zhanghulin的专栏 2555

XML 相关总结[转载]

XML 相关总结 经过昨天的学习,了解到DOM只是提供了一种解析XML的方式(接口),而DOM的接口与语言无关。对DOM接口的实现有微软的MSXML,Xerces-C(Apache),Java的XML4J等。下面对DOM和MSXML的几个接口分别介绍(网上资料,经整理):一.DOM的四个基本接口在DOM接口规范中,有四个基本的接口:Document,Node,NodeList以及N

阿蒙的专栏 1330

VC,VB操作XML

TCHAR buffer[MAX_PATH] = {0}; ::GetModuleFileName(NULL, buffer, MAX_PATH); CString strPath = buffer; int nIndex = strPath.ReverseFind(_T('\\')); strPath = strPath.Left(nIndex + 1); CS...

aaa407217484的博客 228

VC6中使用MSXML 4.0 DOM处理XML文档转载,仅供学习)

VC6中使用MSXML 4.0 DOM处理XML文档转载,仅供学习) 1. DOMXML DOM是Document Object Model的缩写,提供了与XML交互的标准编程模型:(1)提供了标准方法在...

331

VC操作XML

转载自:博客园http://www.cnblogs.com/ciey/archive/2009/08/05/1539760.html http://www.firstobject.com/dn_markup.htm DotNet中使用xml相对比较轻松,在vc操作xml,有些繁琐。最近在网络上得知CMarkup比较好用,于是试了下,还好,就把部分例子写出来。以后有时间的话,再写清楚点。

除却猩猩不是猿 909

VC中应用MSXML DOM 的一些基本实现方法

 已知变量MSXML2::IXMLDOMDocument *pDoc;MSXML2::IXMLDOMNode *pChild, *pParent;MSXML2::IXMLDOMNode *pNod;MSXML2::IXMLDOMElement *pEle;  初始化指针:MSXML2::IXMLDOMDocument *pDocument=NULL;MSXML2::IXMLDOMNod

就是要去飞翔…… 5249

VC解析XML文件-CMarkup的使用详解

VC解析XML文件的工具有很多,CMarkup, tinyXML,还有IBM的,MS的等等。据说tinyXML很好,可能字符集问题,我编译不了。所以就用CMarkup来解析,使用过后,觉得非常不错,使用起来很方便。CMarkup下载地址:http://www.firstobject.com/发现网上有方法很法,我就摘下来了 代码如下://———-UserInfo.xml————–    xml version=”1.0″ encoding=”UTF-8″ ?>           luo       lin

如何用vc创建和读取xml文件

XML DOM对象提供了一个标准的方法来操作存储在XML文档中的信息,DOM应用编程接口(API)用来作为应用程序和XML文档之间的桥梁。   DOM可以认为是一个标准的结构体系用来连接文档和应用程序(也可以是剧本语言)。MSXML解析器允许你装载和创建一个文档,收集文档的错误信息,得到和操作文档中的所有的信息和结构,并把文档保存在一个XML文件中。DOM提供给用户一个接口来装载、到达和操作并序列化XML文档DOM提供了对存储在内存中的XML文档的一个完全的表示,提供了可以随机访问整个文档的方法。DOM允许应用程序根据MSXML解析器提供的逻辑结构来操作XML文档中的信息。利用MSXML所提供的接口来操作XML

VC 读写XML文件类库

XML文件的读写操作类封装的代码, 可以根据XML文件格式进行灵活的读写操作、获取标签、节点的属性等……

VC读写XML文档

转载http://blog.sina.com.cn/s/blog_4b5039210100issi.html 实验环境:VC++6.0 ,windows XP   需要安装MSXML 4.0 SP2      实现的功能是初始化XML文档读取特定节点,和创建新节点删除节点等操作XML文件如下所示:       首先我们要实现的功能是:创建一个如图所示

寻找中 1760

如何在VC环境下编写程序读取XML文件

#import named_guids  //导入动态库,装了IE5就有using namespace MSXML2;     //引用命名空间,一般可以把命名空间理解成类和接口的集合,呵呵,对不对我也不知道了#include using namespace std;struct FIELD{public: CString  name; CString  type; CString  len

ITBUG的专栏 3277

VC++读写XML文件

1、安装MSXML 4.0 SP2。在VC6中建立一个基于Dialog的工程。如图: 在界面上放置3个编辑框、1个按钮控件。其中属性设置如下。 编辑框: ID Category Variable Type Variable Name IDC_ID Value CString m_strId IDC_AUTHOR Value

fengzhishang2019的专栏 9440
上一篇: 网络推广形式种类(精)
下一篇: 软件架构师
namtaerg
博客等级 码龄20年 12粉丝 6原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值