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

笑看風云淡

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

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

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

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

#import "MSXML6.dll" rename_namespace("MSXML6") named_guids
using namespace MSXML6;
因為解析的時候要用到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)))    //創建Document對象
    {
        CComVariant vPath(strFileName);
        VARIANT_BOOL isSuccessful;
        pDoc
->raw_load(vPath,&isSuccessful);    //加載要解析的XML文件
        if(isSuccessful!=VARIANT_TRUE)
        
{
            AfxMessageBox(
"wrong!");
            
return;
        }

    }
我當時在加載XML文件的時候老是報錯,本來以為是代碼的問題,找了半天都沒問題呀。后來發現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>
現在加載XML文件已經沒有問題了,下面就是解析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);
                    }

                }

            }

        }

    }
后來調試的時候發現,對xsi:type屬性節點調用get_basename()方法,得到的是type,而不是xsi:type;當然對type屬性節點調用get_basename()方法,得到的是type,這個正常。后來我改用IXMLDOMNode的get_nodeName()方法,才把問題解決了。對xsi:type屬性節點調用get_nodename()方法,得到的是xsi:type;對type屬性節點調用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);
                    }

                }

            }

        }

    }

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   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>
            翔田千里一区二区| 久久夜色精品| 国产日韩一区二区| 99国产成+人+综合+亚洲欧美| 亚洲一区二区三区高清| 欧美激情在线| 免费观看久久久4p| 在线日韩一区二区| 久久久久免费观看| 先锋a资源在线看亚洲| 国产精品久久久久国产a级| 一区二区欧美精品| 日韩亚洲欧美在线观看| 欧美日韩情趣电影| 亚洲视频一区二区在线观看 | 欧美成人免费网| 国产一区二区欧美| 噜噜噜在线观看免费视频日韩| 欧美一区二区三区免费大片| 国产区在线观看成人精品| 欧美中文日韩| 久久久久久9999| 亚洲电影免费观看高清完整版在线观看 | 国内精品久久久久影院 日本资源| 欧美在线视频一区| 欧美伊久线香蕉线新在线| 国产香蕉久久精品综合网| 久久久成人精品| 久久综合中文字幕| 一本大道久久a久久综合婷婷 | 亚洲一卡久久| 麻豆成人在线观看| 久久精品在线免费观看| 久久福利毛片| 亚洲第一搞黄网站| 亚洲三级免费电影| 亚洲天天影视| 亚洲视频香蕉人妖| 久久久久久久91| 在线看片一区| 亚洲精品欧美精品| 激情伊人五月天久久综合| 亚洲国产高清自拍| 亚洲日本乱码在线观看| 蜜臀久久99精品久久久画质超高清 | 你懂的视频欧美| 欧美一区二区三区久久精品茉莉花 | 9色国产精品| 亚洲精品国产精品国自产观看| 国产精品成av人在线视午夜片| 欧美成人综合一区| 在线性视频日韩欧美| 亚洲欧美日韩国产成人精品影院| 狠狠色狠色综合曰曰| 亚洲高清影视| 国产美女精品视频| 欧美国产国产综合| 国产精品免费一区豆花| 欧美国产成人在线| 国产农村妇女毛片精品久久莱园子 | 在线精品一区| 亚洲一区二区视频在线| 亚洲国产精品悠悠久久琪琪| 亚洲私人影吧| 99国产精品国产精品毛片| 欧美一级片久久久久久久| 亚洲片在线资源| 欧美一区=区| 亚洲色图自拍| 欧美国产日韩在线| 麻豆精品精品国产自在97香蕉| 欧美视频日韩| 亚洲精品国产精品国自产在线 | 亚洲欧美一区二区激情| 久热爱精品视频线路一| 久久国内精品视频| 国产精品美女久久久久aⅴ国产馆| 欧美成人午夜激情视频| 国内精品久久国产| 久久久久91| 国产目拍亚洲精品99久久精品| 99精品国产99久久久久久福利| 日韩香蕉视频| 国产欧美日韩三区| 久久精品一级爱片| 午夜亚洲影视| 亚洲午夜在线观看| 欧美日韩免费在线视频| 亚洲人成啪啪网站| 久久av一区| 久久久久国产精品麻豆ai换脸| 国产精品一区二区你懂得| 亚洲最新色图| 亚洲午夜电影在线观看| 欧美久久久久| 日韩特黄影片| 亚洲深夜福利视频| 欧美三区美女| 9久草视频在线视频精品| 一个人看的www久久| 欧美女同视频| 在线视频欧美精品| 欧美亚洲三区| 亚洲全部视频| 日韩午夜黄色| 国产精品扒开腿做爽爽爽视频| 日韩亚洲一区在线播放| 亚洲综合色网站| 国产色婷婷国产综合在线理论片a| 亚洲欧美精品suv| 久久艳片www.17c.com| 亚洲高清在线精品| 欧美激情成人在线| 一区二区三区欧美日韩| 欧美一区二区黄色| 国语自产精品视频在线看抢先版结局| 久久精品一区四区| 亚洲国产女人aaa毛片在线| 艳妇臀荡乳欲伦亚洲一区| 国产精品sm| 久久久蜜桃一区二区人| 91久久一区二区| 欧美亚洲视频在线观看| 亚洲国产精品毛片| 国产精品福利网| 久久人人爽人人| 一区二区三区欧美成人| 久热精品视频在线| 99re66热这里只有精品3直播| 国产精品视频不卡| 免费欧美在线视频| 亚洲自拍三区| 亚洲国产成人91精品| 亚洲综合国产| 亚洲人成人77777线观看| 国产欧美精品在线观看| 欧美成人精品不卡视频在线观看 | 久久综合久色欧美综合狠狠| 99国产精品一区| 美女亚洲精品| 午夜在线不卡| 欧美精品一区二区在线播放| 国产欧美日本一区二区三区| 国产一区二区观看| 亚洲视频成人| 亚洲精品久久久久久下一站| 久热精品视频在线观看一区| 樱桃视频在线观看一区| 欧美国产日韩一区| 欧美激情1区2区3区| 小辣椒精品导航| 老色鬼精品视频在线观看播放| 亚洲网站视频福利| 国内久久婷婷综合| 国产精品国产三级国产专区53| 久久久人成影片一区二区三区| 夜夜嗨av一区二区三区网页| 欧美va亚洲va香蕉在线| 欧美一区二区三区视频免费| 一本色道久久| 91久久中文字幕| 亚洲成人自拍视频| 狠狠色综合色区| 国产婷婷成人久久av免费高清 | 一区二区三区精密机械公司 | 亚洲高清视频中文字幕| 国产日韩欧美综合精品| 国产精品高清在线| 欧美日韩一区二区三区免费看 | 亚洲性视频网址| 一区二区三区四区五区精品| 国产精品成人一区二区艾草| 欧美激情精品| 欧美激情日韩| 欧美大片在线观看一区| 美女日韩欧美| 男人天堂欧美日韩| 欧美**人妖| 欧美黄色成人网| 欧美国产一区二区在线观看| 欧美成人免费全部| 欧美精品一区在线观看| 欧美区一区二| 国产精品白丝av嫩草影院| 国产精品久久久久久久久久免费| 欧美精品一区在线播放| 欧美日韩一区二区三区高清| 欧美午夜欧美| 国产欧美大片| 激情六月婷婷综合| 亚洲电影免费观看高清| 亚洲欧洲一区| 亚洲少妇在线| 久久精品国产清高在天天线| 欧美中文字幕久久| 另类天堂av| 亚洲精选一区二区| 亚洲女同性videos| 亚洲欧美国产精品专区久久| 美女视频黄a大片欧美|