松鼠的博客

导航

解析XML文件

 使用MSXML SDK步骤:
(1)Tools->Options->Directories 添加 msxml2.lib 目录 和 include 文件目录
(2)Project->Settings->Link->Object/library modules 添加 msxml2.lib
(3)在引用类的头文件中#include "msxml2.h"

注意:
(1)XML文件格式应为UNICODE,MSXML只支持UNICODE

void CTestDlg::InitXml()
{
    HRESULT hr;
    IXMLDOMDocument 
* doc = NULL;
    
//IXMLDOMElement* root = NULL;
    IXMLDOMElement *root = NULL;
    VARIANT_BOOL vb 
= false;
    IXMLDOMNodeList
* childList = NULL;
    
long len;
    
//CComBSTR file(L"E:\\vc\\test\\Debug\\test.xml");
    CString str(L"E:\\vc\\test\\Debug\\test.xml");
    BSTR bstr 
= str.AllocSysString();

    
    
    hr 
= CoInitialize(NULL);    
    hr 
= CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER,IID_IXMLDOMDocument, (void**)&doc);    
    
    hr 
= doc->load(CComVariant(L"E:\\vc\\test\\Debug\\test.xml"),&vb);
    
if (FAILED(hr))
    
{
        AfxMessageBox(
"加载XML失败");
        
return;
    }

    hr 
= doc->get_documentElement(&root);//获取根
    if (FAILED(hr))
    
{
        AfxMessageBox(
"获取根节点失败");
        
return;
    }

    root
->get_childNodes(&childList);
    childList
->get_length(&len);

    
for (int i = 0 ; i < len ; ++i)
    
{
        IXMLDOMNode 
*item;
        IXMLDOMNode 
*nameAtr;
        IXMLDOMNamedNodeMap 
*atr;
        wchar_t 
*name = new wchar_t[255];

        memset(name,
0,sizeof(name));
        childList
->get_item(i,&item);
        item
->get_attributes(&atr);//获取属性
        atr->getNamedItem(L"name",&nameAtr);//获取名称值
        nameAtr->get_text(&name);//获取name值
        CString strName(name);
        
this->m_List.InsertItem(i,strName);
    }

    CoUninitialize();
}

 

相关参考:
http://www.vcer.net/2248.html

MSXML Parser 3.0 SDK下载:
http://www.microsoft.com/downloads/details.aspx?FamilyID=87925008-ec5a-4ff2-a7ef-549ab0394eda&displaylang=en

posted on 2008-12-11 15:58  Xproer-松鼠  阅读(454)  评论(0)    收藏  举报