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

笑看風云淡

寵辱不驚,看庭前花開花落;去留無意,望天空云卷云舒
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>
            亚洲高清av| 欧美成人一品| 亚洲国产日韩美| 欧美精品v日韩精品v国产精品| 亚洲美女诱惑| 亚洲欧美综合v| 亚洲大胆人体视频| 9色porny自拍视频一区二区| 国产精品区一区二区三| 能在线观看的日韩av| 欧美视频一区| 欧美高清不卡| 国产欧美日韩在线观看| 亚洲国产精品视频一区| 国产色产综合产在线视频| 亚洲娇小video精品| 国产在线精品成人一区二区三区 | 久久超碰97人人做人人爱| 91久久国产精品91久久性色| 亚洲视频axxx| 99v久久综合狠狠综合久久| 欧美在线视频免费播放| 亚洲专区一区二区三区| 欧美chengren| 久久综合九色综合久99| 国产精品久久久久久一区二区三区| 免费永久网站黄欧美| 国产精品资源| 日韩一区二区精品在线观看| 亚洲黄页视频免费观看| 久久国产天堂福利天堂| 欧美一区二区播放| 欧美日韩一区免费| 亚洲精品美女| 亚洲久久一区二区| 久久这里有精品视频| 久久精品欧美日韩| 国产精品vvv| 一本色道久久综合精品竹菊 | 久久精品首页| 久久久精品动漫| 国产伦精品一区二区| 亚洲视频免费| 性做久久久久久| 国产精品亚发布| 亚洲欧美韩国| 欧美在线视频播放| 国产欧美一区二区精品忘忧草| 一本色道久久精品| 亚洲一区二区日本| 国产精品theporn88| 一本色道久久综合亚洲二区三区| 在线亚洲一区观看| 国产精品大全| 午夜亚洲视频| 久久裸体艺术| 亚洲国产日韩欧美在线动漫| 农夫在线精品视频免费观看| 亚洲高清自拍| 亚洲一二三区在线| 国产精品入口| 欧美中文字幕在线视频| 美玉足脚交一区二区三区图片| 在线播放视频一区| 欧美高清视频| 欧美午夜精品| 亚洲一区二区毛片| 久久国产精品黑丝| 伊人蜜桃色噜噜激情综合| 久久一二三区| 亚洲国产精品成人综合色在线婷婷| 亚洲欧洲在线免费| 欧美日韩专区在线| 午夜精品久久久久久久久久久久 | 欧美视频日韩视频| 先锋影音一区二区三区| 免费久久99精品国产| 亚洲免费观看在线观看| 国产精品福利网| 欧美在线免费| 亚洲国产日韩一区二区| 亚洲免费网址| 在线不卡视频| 欧美三区不卡| 久久久久久久综合色一本| 亚洲国产美国国产综合一区二区| 亚洲视频你懂的| 精品动漫一区二区| 国产精品yjizz| 久久综合给合| 亚洲在线视频网站| 亚洲福利视频在线| 欧美在线欧美在线| 日韩一级片网址| 国内精品一区二区| 欧美三级资源在线| 美国十次了思思久久精品导航| 99亚洲一区二区| 牛牛国产精品| 欧美在线视频a| 野花国产精品入口| 伊人男人综合视频网| 国产精品女主播| 欧美国产高清| 久久久不卡网国产精品一区| 日韩香蕉视频| 亚洲大胆在线| 狂野欧美激情性xxxx| 亚洲一区国产精品| 91久久国产自产拍夜夜嗨| 国产一区二区三区成人欧美日韩在线观看 | 麻豆久久婷婷| 欧美一区午夜精品| 9l视频自拍蝌蚪9l视频成人| 欧美成人a视频| 欧美一区二区三区成人| 日韩一级在线| 亚洲国语精品自产拍在线观看| 国产欧美精品xxxx另类| 欧美日韩视频专区在线播放| 免费在线观看日韩欧美| 久久精品亚洲精品| 欧美怡红院视频一区二区三区| 一区二区三区www| 亚洲精品色婷婷福利天堂| 欧美国产高潮xxxx1819| 久久午夜激情| 久久五月天婷婷| 久久香蕉国产线看观看av| 午夜久久久久| 香蕉久久a毛片| 亚洲欧美综合网| 亚洲欧美在线免费| 午夜久久久久久| 欧美一级视频免费在线观看| 国产精品久久久久久久久久免费 | 欧美尤物巨大精品爽| 亚洲欧美综合v| 欧美一级在线视频| 欧美一区二区福利在线| 亚洲女ⅴideoshd黑人| 亚洲一品av免费观看| 亚洲香蕉网站| 校园春色国产精品| 久久国产天堂福利天堂| 欧美一区二区三区免费观看视频| 亚洲一区三区电影在线观看| 亚洲与欧洲av电影| 亚洲欧美激情视频| 久久av红桃一区二区小说| 久久精品欧洲| 免费黄网站欧美| 亚洲日本欧美在线| 一区二区三区国产在线观看| 日韩一区二区精品在线观看| 在线视频中文亚洲| 欧美一区二区福利在线| 久久青青草综合| 欧美久久电影| 国产精品一区二区在线观看不卡| 国产日韩精品一区二区三区 | 亚洲视频综合| 久久激情视频| 欧美精品免费在线| 国产精品久久国产精品99gif | 一本大道久久a久久精二百| 亚洲一区二区av电影| 羞羞答答国产精品www一本| 久久免费视频在线观看| 欧美精品日韩一本| 国产欧美一区二区精品秋霞影院| 一区在线观看| 亚洲视频在线看| 久久一区二区三区超碰国产精品| 欧美成人按摩| 亚洲伊人久久综合| 久久久夜精品| 国产精品vip| 亚洲欧洲一区二区三区在线观看| 亚洲一区二区高清视频| 麻豆国产精品777777在线| 亚洲人体影院| 久久久999成人| 欧美三日本三级少妇三2023 | aa成人免费视频| 久久久久久久波多野高潮日日| 欧美精品自拍| 在线看国产一区| 亚洲自拍偷拍网址| 欧美成人在线网站| 亚洲一区日韩| 欧美精品99| 精品999成人| 欧美一二三区精品| 亚洲欧洲午夜| 久久一区激情| 国产资源精品在线观看| 亚洲一二三四区| 最新69国产成人精品视频免费| 欧美在线视频免费播放|