青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

笑看風(fēng)云淡

寵辱不驚,看庭前花開花落;去留無意,望天空云卷云舒
posts - 96, comments - 48, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

使用MSXML在VC++中解析XML文件

Posted on 2009-08-25 15:29 天之驕子 閱讀(5145) 評論(0)  編輯 收藏 引用

好久沒有在VC++里面解析XML了,昨天遇到一個問題,從昨天下午一直到今天上午,差不多搞了一天,才終于把問題解決了。
使用MSXML在VC++中解析XML文件時候,只需要做到下面幾點(diǎn):
1、初始化COM庫,CoInitialize(NULL);可以放在InitInstance()函數(shù)里面。釋放COM庫,CoUninitialize();可以放在ExitInstance()函數(shù)里面。
2、在頭文件里面加入如下代碼

#import "MSXML6.dll" rename_namespace("MSXML6") named_guids
using namespace MSXML6;
因?yàn)榻馕龅臅r候要用到CComVariant類,所以還要加上
#include <atlbase.h>
3、解析XML文件。
需要解析的XML文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<SCL xmlns="http://www.iec.ch/61850/2003/SCL">
    
<Address type="MAC-Address" xsi:type="tP_MAC-Address">
    01-0C-CD-01-00-08
</Address>
</SCL>
首先要加載XML文件,代碼如下:
    HRESULT hr;
    IXMLDOMDocument 
*pDoc=NULL;

    CString strFileName;
    
    CFileDialog fileDlg(TRUE);
    fileDlg.m_ofn.lpstrTitle
="打開XML文件";
    fileDlg.m_ofn.lpstrFilter
="XML Files(*.xml)\0*.xml\0All Files(*.*)\0*.*\0\0";
    fileDlg.m_ofn.lpstrDefExt
="xml";
    
if(fileDlg.DoModal() != IDOK)
        
return;
    strFileName
=fileDlg.GetPathName();        //獲得要解析的XML文件的路徑名
    ASSERT(!strFileName.IsEmpty());

    
if(SUCCEEDED(CoCreateInstance(CLSID_DOMDocument,NULL,
        CLSCTX_INPROC_SERVER,IID_IXMLDOMDocument,(
void**)&pDoc)))    //創(chuàng)建Document對象
    {
        CComVariant vPath(strFileName);
        VARIANT_BOOL isSuccessful;
        pDoc
->raw_load(vPath,&isSuccessful);    //加載要解析的XML文件
        if(isSuccessful!=VARIANT_TRUE)
        
{
            AfxMessageBox(
"wrong!");
            
return;
        }

    }
我當(dāng)時在加載XML文件的時候老是報(bào)錯,本來以為是代碼的問題,找了半天都沒問題呀。后來發(fā)現(xiàn)XML文件的問題,問題出在xsi:type上,如果將xsi:type改成別的(比如ype就可以了);或者是在根元素里面定義好xsi的意義,修改后的XML文件如下
<?xml version="1.0" encoding="UTF-8"?>
<SCL xmlns="http://www.iec.ch/61850/2003/SCL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    
<Address type="MAC-Address" xsi:type="tP_MAC-Address">
    01-0C-CD-01-00-08
</Address>
</SCL>
現(xiàn)在加載XML文件已經(jīng)沒有問題了,下面就是解析XML文件了。我所做的工作是得到元素Address的兩個屬性的名稱type和xsi:type,以及它們的屬性值。
我原來的解析代碼是:
    IXMLDOMElement *pRootElement=NULL;
    IXMLDOMNode 
*pRootNode=NULL;

    IXMLDOMNamedNodeMap 
*pAttrMap=NULL;
    IXMLDOMNode 
*pAttrNode=NULL;
    IXMLDOMNode 
*pAddrNode=NULL;

    CString strName,strText;
    BSTR bsName,bsText;

    hr
=pDoc->get_documentElement(&pRootElement);
    
if(SUCCEEDED(hr) && (pRootElement!=NULL))
    
{
        hr
=pRootElement->QueryInterface(IID_IXMLDOMNode,(void**)&pRootNode);
        
if(SUCCEEDED(hr))
        
{

            hr
=pRootNode->get_firstChild(&pAddrNode);
            
if(SUCCEEDED(hr) && (pAddrNode!=NULL))
            
{
                pAddrNode
->get_attributes(&pAttrMap);
                
                
long length=0;
                pAttrMap
->get_length(&length);
                
for(int i=0;i<length;i++)
                
{
                    hr
=pAttrMap->get_item(i,&pAttrNode);
                    
if(SUCCEEDED(hr) && (pAttrNode!=NULL))
                    
{
                        pAttrNode
->get_baseName(&bsName);
                        pAttrNode
->get_text(&bsText);
                        strName
=bsName;
                        strText
=bsText;
                        
                        SysFreeString(bsName);
                        SysFreeString(bsText);
                    }

                }

            }

        }

    }
后來調(diào)試的時候發(fā)現(xiàn),對xsi:type屬性節(jié)點(diǎn)調(diào)用get_basename()方法,得到的是type,而不是xsi:type;當(dāng)然對type屬性節(jié)點(diǎn)調(diào)用get_basename()方法,得到的是type,這個正常。后來我改用IXMLDOMNode的get_nodeName()方法,才把問題解決了。對xsi:type屬性節(jié)點(diǎn)調(diào)用get_nodename()方法,得到的是xsi:type;對type屬性節(jié)點(diǎn)調(diào)用get_nodename()方法,得到的是type。
修改后的VC++代碼如下
    IXMLDOMElement *pRootElement=NULL;
    IXMLDOMNode 
*pRootNode=NULL;

    IXMLDOMNamedNodeMap 
*pAttrMap=NULL;
    IXMLDOMNode 
*pAttrNode=NULL;
    IXMLDOMNode 
*pAddrNode=NULL;

    CString strName,strText;
    BSTR bsName,bsText;

    hr
=pDoc->get_documentElement(&pRootElement);
    
if(SUCCEEDED(hr) && (pRootElement!=NULL))
    
{
        hr
=pRootElement->QueryInterface(IID_IXMLDOMNode,(void**)&pRootNode);
        
if(SUCCEEDED(hr))
        
{

            hr
=pRootNode->get_firstChild(&pAddrNode);
            
if(SUCCEEDED(hr) && (pAddrNode!=NULL))
            
{
                pAddrNode
->get_attributes(&pAttrMap);
                
                
long length=0;
                pAttrMap
->get_length(&length);
                
for(int i=0;i<length;i++)
                
{
                    hr
=pAttrMap->get_item(i,&pAttrNode);
                    
if(SUCCEEDED(hr) && (pAttrNode!=NULL))
                    
{
                        pAttrNode
->get_nodeName(&bsName);
                        pAttrNode
->get_text(&bsText);
                        strName
=bsName;
                        strText
=bsText;
                        
                        SysFreeString(bsName);
                        SysFreeString(bsText);
                    }

                }

            }

        }

    }

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区三区欧美日韩| 亚洲国产精品精华液网站| 欧美.www| 日韩视频不卡| 久久精品一区二区三区四区| 亚洲精品在线视频| 国内精品久久久久久久影视麻豆 | 欧美久久婷婷综合色| 亚洲调教视频在线观看| 麻豆精品91| 国外视频精品毛片| 国产精品日韩欧美| 99v久久综合狠狠综合久久| 久久国产色av| 亚洲一区二区视频| 日韩性生活视频| 在线观看av不卡| 欧美自拍丝袜亚洲| 亚洲欧美日韩网| 国产精品99久久久久久久女警 | 在线播放亚洲| 久久久精品久久久久| 亚洲国产婷婷| 另类国产ts人妖高潮视频| 亚洲一区二区三区免费视频| 亚洲激情视频在线| 黄色一区三区| 久久精品毛片| 欧美亚洲免费| 欧美在线视频不卡| 欧美伊人久久久久久久久影院| 亚洲先锋成人| 亚洲天堂免费观看| 老司机久久99久久精品播放免费| 香港久久久电影| 亚洲欧美精品在线观看| 亚洲一区在线播放| 午夜精品国产精品大乳美女| 亚洲专区在线视频| 久久av一区二区三区| 一区二区三区四区国产精品| 99精品欧美一区| 亚洲精品少妇30p| 亚洲精品影视| 一区二区三区欧美激情| 亚洲一区二区日本| 亚洲香蕉视频| 久久精品国产2020观看福利| 久久久久久婷| 欧美77777| 亚洲高清不卡在线| 久久久久网站| 亚洲国产第一| 亚洲午夜一区二区三区| 久久精品视频va| 欧美网站在线观看| 欧美日韩一区二区精品| 国产精品资源在线观看| 在线国产精品播放| 中文亚洲欧美| 欧美顶级艳妇交换群宴| 欧美日韩中文字幕在线视频| 国产麻豆精品视频| 亚洲区一区二区三区| 亚洲制服丝袜在线| 亚洲国产一区二区在线| 久久久国产精品亚洲一区| 欧美三级乱人伦电影| 国产精品一区免费观看| 亚洲免费在线视频| 女人香蕉久久**毛片精品| 国产精品久久久久毛片软件 | 午夜视频在线观看一区二区三区| 狼人社综合社区| 欧美激情一区二区三区| 欧美日韩在线观看一区二区三区| 久久在线免费视频| 国产精品羞羞答答xxdd| 亚洲天堂偷拍| 亚洲免费成人av电影| 久久免费视频观看| 久久影音先锋| 一区二区三区毛片| 久久天天狠狠| 亚洲精品国产精品乱码不99| 欧美一区二区三区四区在线观看地址| 欧美精品自拍偷拍动漫精品| 欧美日韩一区视频| 欧美日韩综合不卡| 亚洲欧洲另类国产综合| 久久久人成影片一区二区三区| 一片黄亚洲嫩模| 欧美激情一区二区在线| 国产精品va在线| 亚洲天天影视| 亚洲一区二区三区精品在线| 国产精品女主播在线观看 | 亚洲激情视频网站| 亚洲国产欧美一区二区三区同亚洲| 欧美成年人视频| 这里只有精品电影| 亚洲欧美视频在线| 樱桃成人精品视频在线播放| 欧美成黄导航| 欧美日韩mp4| 欧美亚洲三区| 久久久亚洲高清| 国产一区二区电影在线观看| 久久综合精品国产一区二区三区| 久热国产精品视频| 中文日韩在线视频| 欧美一区三区二区在线观看| 亚洲电影免费| 亚洲午夜性刺激影院| 亚洲福利视频专区| 亚洲素人在线| 亚洲第一网站免费视频| 亚洲视频一二区| 激情综合久久| 亚洲卡通欧美制服中文| 国产视频亚洲| 亚洲精品国产精品国自产在线| 国产日韩欧美一区二区三区四区| 欧美华人在线视频| 国产精品一区=区| 亚洲高清久久久| 国产三级欧美三级| 9人人澡人人爽人人精品| 欧美日韩成人在线视频| 亚洲淫性视频| 亚洲乱码国产乱码精品精可以看 | 欧美mv日韩mv国产网站| 国产精品成人一区二区三区夜夜夜| 久久视频精品在线| 欧美日韩精品在线| 欧美成人一品| 国产一区二区三区四区| 夜夜嗨av一区二区三区| 在线观看中文字幕不卡| 午夜精品国产更新| 亚洲综合999| 羞羞色国产精品| 久久成人免费视频| 国产精品高潮呻吟久久| 亚洲人成网站影音先锋播放| 好吊视频一区二区三区四区| 亚洲一区二区三| 亚洲一区二区三区涩| 欧美日韩亚洲免费| 亚洲看片一区| 99精品免费网| 久久久xxx| 亚洲欧美另类中文字幕| 欧美日韩亚洲另类| 亚洲全部视频| 99精品热视频| 欧美日韩成人网| 99热免费精品在线观看| 一区二区三区国产精华| 欧美区日韩区| 夜夜嗨一区二区| 亚洲欧美福利一区二区| 国产精品久久综合| 亚洲一区二区三区午夜| 亚洲一区国产精品| 国产精品免费小视频| 亚洲一区二区三区成人在线视频精品| 亚洲午夜免费视频| 国产精品久久国产精麻豆99网站| 一区二区三区四区国产| 亚洲国产成人在线播放| 欧美国产专区| 亚洲美女av黄| 亚洲欧美另类在线观看| 国产美女在线精品免费观看| 久久国产综合精品| 欧美大色视频| 亚洲天堂激情| 欧美电影免费观看| 一片黄亚洲嫩模| 久久九九99| 在线观看日韩av电影| 久久亚洲一区二区| 亚洲国产综合视频在线观看| 亚洲狠狠丁香婷婷综合久久久| 免费精品视频| 老牛国产精品一区的观看方式| 亚洲高清av| 国产精品久久久久久久久久尿| 亚洲自拍偷拍视频| 午夜国产欧美理论在线播放| 国产精品无码专区在线观看| 一区二区三区av| 亚洲国产精品久久久| 亚洲欧美一区二区激情| 久久久久久久久综合| 一区二区三区日韩在线观看| 国产精品久久久久久久久久久久久久| 久久成人精品一区二区三区| 亚洲人成绝费网站色www|