利用MSXML.DLL解析xml文件(修正版)

WINDOWS动态链接库(DLL)-文本加密和解密 文本加密和解密 阅读详情

利用MSXML.DLL解析xml文件。

     一般情况我们装载操作xml文件,不会频繁。因此很容易忽略其中的内存泄露问题。但是如果操作不当其中的内存浪费还是令人难以容忍的。

      最近做一个文件下栽处理的程序,其中下栽的连接信息是通过解析xml来获得。因此对于xml文件的装载和解析频率非常的高。刚开始采用的方式是初始化库CoInitialize, 利用CoCreateInstance创建IXMLDOMDocument然后装载。可是到实际使用的时候才发现内存消耗的太严重了,就几个任务下去程序占用的内存是以M为单位往上涨个不停。最郁闷的是用CMemoryState来观察,也只是看到了不断的申请内存,并不报泄露。刚开始的时候还怀疑是设计的存储数据的结构本身有问题。仔细查来查去,针对数据结构做了几个小测试程序—— 很不幸的是,还真的有点问题。等把问题解决了 只是稍微好点。

       看样子主要问题还不是出在这里。于是做了个测试程序,把每段代码都拿过来做一个循环一千遍的操作,看内存的状态。这一看吓一跳:就一个pDoc->load(_bstr_t(lpszPath)); 就内存消耗疯涨了。想了想大致猜到了问题出那里了,每一次使用IXMLDOMDocument装载之后都要释放(Release)的,看解析的时候原因同样如此。虽然我对整个的这些IXMLDOMNodeList  IXMLDOMElement IXMLDOMNode都有释放的,但是在想法上也是针对于他们本身,在最后的时候选择释放的,而实际上是在每次取得这些内容并解析之后如果不在需要的话都是需要释放的。把所有这些地方都改过来,果然就Okay了。

    回想起以前在做类似处理的时候由于都是单一性的操作,并且内存也不报泄露。就这么自己把自己给忽悠咯。以前在查资料的时候也没有仔细的注意到,好象强调这个的也不多。

下面给出修订后的xml处理的代码:

#define  XML_NODE_TAG   "XmlNodeName"

MSXML2::IXMLDOMDocument * pDoc = NULL;   
 BOOL LoadToc(LPCTSTR lpszPath)
{//装载
     HRESULT hr = NULL;
      //TRACE("/nLoadXML %s /n",lpszPath);
     //TRACE(_T("/nInit MSXML com lib..../n"));   
     try
     { 
           if (NULL!=pDoc)
          {    
              pDoc->Release();   

用utf-8编码写入.xml文件,使得msxml可以成功加载xml文件进行解析 获取相机的设备描述文件.xml之后,需要对它进行解析,获取相关寄存器的信息。 于是利用微软已经给我们提供了一个XML语法解析器,即一个叫做MSXML.DLL的动态链接库,实际上它是一个COM(Component Object Model)对象库,里面封装了进行XML解析时所需要的所有对象。因为COM是一种以二进制格式出现的和语言无关的可重用对象,所以你可以用任何语言(比如VB,VC,DELP 阅读详情

相关推荐

MFC读取XML文件解析

现在经常会对XML文件进行操作,怎么在MFC下去读和解析XML文件呢?直接上代码:        首先得等在stdafx.h中加入这句,以引入MSXML命名空间 #import named_guids using namespace MSXML2;        然后再要使用的类的头文件加入:    //XML Parser intellectural pointer (used

Rayborn1105的专栏 3万+

ActiveObject 对象 Msxml2.DOMDocument 详解

ActiveObject 对象 Msxml2.DOMDocument 详解 asp.net ajax webservice 必懂的一点知识

msxml写一个xml文档

msxml写一个xml文档的源代码 #include "stdafx.h" #import "msxml4.dll" named_guids using namespace MSXML2; inline void linefeed(MSXML2::IXMLDOMDocument2Ptr pXMLDoc, MSXML2::IXMLDOMNode *pRootNode) { pRootNode->appendChild(pXMLDoc->createTextNode("\n")); } inline void addTextElement(MSXML2::IXMLDOMDocument2Ptr pXMLDoc, MSXML2::IXMLDOMNode *pRootNode,LPCTSTR value) { pRootNode->appendChild(pXMLDoc->createTextNode(value)); } .....

MSXML2.DOMDocument

MSXML2.DOMDocument和Microsoft.XMLDOM有什么区别? 答案:版本不同:Microsoft.XMLDOM一般为msxml2.6,2.5,3.MSXML2.DOMDocument为msxml3 或4,MSMXL4支持的标准比较多(譬如它支持W3C的XML Schema),对标准的Conformance也更好,XML分析器与XSLT处理器的效率也更高。 DOMDocument对象很重要,还有XMLHTTP也很重要 注意大小写一定不能弄错....

tisyact的博客 7339

XML简单地加解密的办法(代码)

base64 编码,可以编n次,代价是占用空间增大  XMLDocument1->LoadFromFile("原文.xml")XMLDocument1->Active = true;  AnsiString  s = EncodeString(XMLDocument1->XML)XMLDocument1->ChildNodes->Clear();  _di_IXMLNode node

david_ch的专栏 2342

利用MSXML解析XML文本

一、引言   当前Web上流行的脚本语言是以HTML为主的语言结构,HTML是一种标记语言,而不是一种编程语言,主要的标记是针对显示,而不是针对文档内容本身结构的描述的。也就是说,机器本身是不能够解析它的内容的,所以就出现了XML语言。   XML(eXtensibleMarkup Language)语言是SGML语言的子集,它保留了SGML主要的使用功能,同时大大缩减了SGML的复杂性。XML

博为 904

VC++中利用MSXML解析XML、使用DOM写XML文档

CoInitialize(NULL); // 初始化COM。 CComPtr<IXMLDOMDocument> spXMLDOM; // 创建解析器实例。 HRESULT hr = spXMLDOM.CoCreateInstance (__uuidof(DOMDocument)); VARIANT_BOOL bSuccess = false; // 装载XML文档。 hr = spXMLDOM->load(CComVariant(L"xmlfile.xml"), &..

thanklife的专栏 1943

VC++中利用MSXML解析XML文档

一、 XML 简介   XML(Xtensible Markup Language,即扩展标记语言)的发展起源于1996年。当时,出版界巨头和Web业内人士经过共同讨论,提出了创建SGML(Standard Generalized Markup Language,即标准通用标识语言)子集(HML)的建议。该子集专用于Web,具有可扩展(或可扩充)性,并且能利用结构化标记语言的所有高级功 能,但摒弃

Chinawash 专栏 1457

PB9解析xml(封装好的自定义对象,源码)

PB9解析xml(封装好的自定义对象,源码)

PB9读写xml实例大全

开发环境:PB9;读写XML文件,查看xml文件,将xml文件内容导入datawindow,根据xml文件内容生成菜单树等。

MSXML生成以及解析XML文件

由于最近工作用到XML解析,因此看了一些关于XML的知识,找了很多范例,不过并不是那么有效或者说可以编译的通过。因此自己便从一份从网上拷贝过来的代码进行了修改和尝试,中间出现的问题修改,就有了下面的一篇文章,程序代码直接可以拷过去运行基本不需要什么修改,如果出现一些问题,看程序开始出的一点关于引入afx.h头文件的注释,还有出现的问题可能就是关于#import "msxml6.dll"   上面,

sksksksklove的专栏 980

MSXMLXML,COM的关系概论

它们共同协作,使得在Windows平台上,无论使用何种编程语言,都能以一种标准化、高性能的方式处理XML数据。

lza_csdn2019的博客 1330

微软的MSXML解析

微软的MSXML解析器读一个XML文档,然后把它的内容解析到一个抽象的信息容器中称为节点(NODES)。这些节点代表文档的结构和内容,并允许应用程序来读和操作文档中的信息而不需要显示知道的XML的语义。在一个文档被解析以后,它的节点能够在任何时候被浏览而不需要保持一定的顺序。对开发人员来说,最重要的编程对象是DOMDocument。DOMDocument对象通过暴露属性和方法来允许浏览、查询和修改

月光饭盒--专栏 3229

利用MSXML解析XML文本(VC)

利用MSXML解析XML文本(VC)http://www.blog.edu.cn/user1/122/archives/2004/291.shtml 一、引言  当前Web上流行的剧本语言是以HTML为主的语言结构,HTML是一种标记语言,而不是一种编程语言,主要的标记是针对显示,而不是针对文档内容本身结构的描述的。也就是说,机器本身是不能够解析它的内容的,所以就出现了XML语言。XM

JamesXing的专栏 1442

读取本地xml进行DES加密、解密

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Security.Cryptography; using System.IO; namespace JHEMR.JHOODCommonLib.Utility { /// &amp;lt;summary...

ZhuangLiang 2739

使用MSXML2::IXMLDOMDocument2Ptr每次都要CreateInstance和load(xmlfile)吗?

程序中需要多次对XML文件中数据进行查询,由于XML文件庞大,不能一次把全部数据select进内存, 这样就需要多次分批进行查询(对不同层次上的节点). 我遇到的问题是当把一个IXMLDOMDocument2Ptr的Instance放到静态变量里,似乎不起作用,这样就造成每次查询都要CreateInstance和load(xmlfile),当多线程进行读和写XML文件的时候,经常报访问冲突...

weixin_34344403的博客 1148

使用MSXML2解析XML文件

MFC使用MSXML2解析XML文件

weixin_45144862的博客 2672

VS2015报class "MSXML2::IXMLDOMDocument" 没有成员 "appendChild". or没有成员“selectSingleNode”等

 最新微软推出的msxml6支持W3C标准,并且提升安全性,并已经开始过渡项目到msxml6,因此为了项目的后期可持续性和兼容性,在新项目使用msxml6,按照微软DOM文档编写程序,遇到如上标题问题。 这里开发使用的是smart point接口的方法,是DOM两种方法之一,另一种是原始接口,较智能指针稍微繁杂一些。 引用: import "msxml6.dll" //using name...

CODE实验室 2312
下一篇: 做一个好的程序员,我们需要做很多很多
ZenKoan
博客等级 码龄20年 0粉丝 2原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值