用MSXML解析XML

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 feiyuo3000 的 blog

2005年5月26日 星期四 08时14分   晴

用msxml解析xml
做大作业的时候想把一些东西写到xml中,读取的时候比较方便.
由于本程序在vc6中运行,所以有xml有很多高级功能无法使用,但基本操作还是可以的,
这个方法是用msxml解析文件,速度并不快,在我的机器(ce1.1+256)已经能感觉到有些延迟,
如果真的读取几千行的话,恐怕连运行都会出现问题,采取.net平台会好些,可以用writexml的方法访问,
毕竟是人家提出的标准么,反正vc6别想用那个该死的类库了.呵呵.
网上有第三方插件可以提高访问xml的访问效率,有机会做一下研究.
下面的方法比较老,但可以实现基本功能.

1)写一个xml文件user.xml
<root>
        <user id="101">
                <name>abc</name>
                <password>abc</password>
        </user>
        <user id="102">
                <name>ccc</name>
                <password>ccc</password>
        </user>
</root>
2)需要引入几个头文件:
 #include "msxml.h"
 #include "atlbase.h"
 #import "msxml.dll"
如果需要最新版的话,可以引入msxml2
#import "msxml3.dll"
using namespace msxml2;
引用namespace后可以不用加前缀
3)随便建一个对话框加入下面代码:
        try{      //读取xml代码需要放在try块,因为建立com可能会产生exception
                coinitialize(null);//初始化com组件,
                msxml::ixmldomdocumentptr pdoc;
                hresult hr =  pdoc.createinstance(__uuidof(msxml::domdocument));//创建一个com进程
                if(!succeeded(hr))
                {
                        afxmessagebox("failure");
                 }

                pdoc->load("user.xml");
                msxml::ixmldomnodelistptr pnodelist = null;
                pnodelist = pdoc->selectnodes("root/user");
                msxml::ixmldomnodeptr psubnode;

                cstring strtemp;
                for(int i=0;i<pnodelist->getlength();i++)
                {
                        psubnode=pnodelist->nextnode()->selectsinglenode("name");
                        _bstr_t strrequesttype=psubnode->gettext();
                        strtemp=strrequesttype.operator char *();
                        afxmessagebox(strtemp);
                }
        }catch(...)
        {
                   afxmessagebox(_t("exception occurred"));
        }
4)其他请操作请参考msdn msxml索引项.

本文关键:用MSXML解析XML
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top