解析XML文件

来源:互联网 发布:上海众阮科技骗局 知乎 编辑:程序博客网 时间:2024/05/20 18:45

使用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

原创粉丝点击