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索引项.

|