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

笑看風云淡

寵辱不驚,看庭前花開花落;去留無意,望天空云卷云舒
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文件時候,只需要做到下面幾點:
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);
                    }

                }

            }

        }

    }
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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视频一区二区三区| 蜜桃av综合| 欧美sm极限捆绑bd| 性刺激综合网| 欧美激情一区二区三区成人 | 久久av红桃一区二区小说| 欧美国产日韩亚洲一区| 欧美激情a∨在线视频播放| 国产日产精品一区二区三区四区的观看方式| 欧美久久电影| 欧美日韩蜜桃| 国产精品日本| 韩日成人在线| 亚洲区欧美区| 亚洲一区在线免费| 久久久亚洲综合| 亚洲精选在线观看| 午夜视频在线观看一区二区三区| 久久高清福利视频| 欧美日韩国产成人高清视频| 国产精品乱码久久久久久| 激情另类综合| 亚洲综合色自拍一区| 伊人久久大香线蕉av超碰演员| 在线精品视频在线观看高清| 宅男噜噜噜66国产日韩在线观看| 久久综合色一综合色88| 日韩亚洲欧美高清| 久久免费一区| 这里只有精品视频| 欧美成人午夜免费视在线看片| 国产精品美女一区二区在线观看| 精品动漫av| 欧美在线啊v一区| 亚洲另类在线一区| 亚洲精品一区在线观看| 国产一区 二区 三区一级| 日韩午夜激情av| 欧美成人精品一区二区| 欧美一区视频在线| 国产精品草草| 国产精品亚洲激情| 欧美a级大片| 中文一区二区在线观看| 欧美a级片网| 亚洲风情在线资源站| 久久亚裔精品欧美| 欧美一区不卡| 亚洲欧美在线免费观看| 欧美激情成人在线视频| 亚洲国产精品视频| 久久综合九色综合久99| 欧美一区观看| 国产日韩专区在线| 香港成人在线视频| 中文在线一区| 国产精品剧情在线亚洲| 最新日韩中文字幕| 日韩视频中文字幕| 亚洲日本免费| 久久视频在线视频| 艳女tv在线观看国产一区| 欧美在线观看网址综合| 国产精品成人一区二区三区夜夜夜| 亚洲人成亚洲人成在线观看图片| 久久综合亚州| 久久久中精品2020中文| 亚洲高清免费| 亚洲国产精品999| 免费在线国产精品| 麻豆成人综合网| 狠狠久久综合婷婷不卡| 麻豆成人在线播放| 欧美电影打屁股sp| 一区二区欧美激情| 日韩视频免费看| 亚洲午夜国产成人av电影男同| 久久综合福利| 亚洲第一福利视频| 亚洲国产91| 欧美日本在线观看| 亚洲大胆女人| 99精品欧美一区| 国产精品永久入口久久久| 亚洲欧美日韩另类精品一区二区三区| 国产婷婷97碰碰久久人人蜜臀| 日韩亚洲精品视频| 亚洲高清在线精品| 香蕉成人啪国产精品视频综合网| 久久在线视频| 一区二区精品在线观看| 亚洲视屏在线播放| 一区二区三区视频在线看 | 亚洲精品国产精品国自产在线 | 久久超碰97人人做人人爱| 久久天天躁狠狠躁夜夜爽蜜月| 国产一区二区三区黄| 免费成年人欧美视频| 日韩午夜激情| 欧美aⅴ一区二区三区视频| 亚洲欧美中文日韩在线| 99综合电影在线视频| 一区二区三区偷拍| 国产精品永久免费观看| 99riav国产精品| 亚洲一区二区三区精品在线| 久久gogo国模裸体人体| 玖玖在线精品| 亚洲国产精品一区| 亚洲一区三区在线观看| 亚洲国产精品久久久久秋霞不卡 | 国产视频一区在线| 国产精品综合网站| 一区精品在线播放| 亚洲第一色中文字幕| 亚洲人成网站色ww在线| 国内精品视频在线播放| 午夜免费久久久久| 亚洲肉体裸体xxxx137| 欧美一区成人| 欧美成人一区二区三区片免费| 牛人盗摄一区二区三区视频| 久久精品一级爱片| 欧美成人午夜激情视频| 欧美视频一区二区三区四区| 国产精品视频免费| 亚洲国产乱码最新视频 | 亚洲人成网站影音先锋播放| 国产精品国产三级国产aⅴ9色| 国产精品vip| 亚洲国产一区二区三区在线播| 亚洲精选在线观看| 久久国产精品久久久久久电车| 葵司免费一区二区三区四区五区| 麻豆精品精华液| 一区二区三区免费看| 久久综合伊人77777| 国产精品高潮在线| 久久精品国产99国产精品| 欧美日韩成人一区二区三区| 亚洲大片在线| 亚洲私人影院在线观看| 久久久久亚洲综合| 欧美一级黄色录像| 欧美午夜剧场| 日韩写真在线| 亚洲国产另类久久久精品极度| 久久精品国产亚洲高清剧情介绍| 国产精品午夜久久| 性高湖久久久久久久久| 亚洲国产精品成人精品| 欧美国产一区在线| 亚洲精品影视在线观看| 久久精品三级| 欧美亚洲系列| 好看不卡的中文字幕| 亚洲欧美另类中文字幕| 一本色道久久99精品综合| 蜜桃伊人久久| 久久久久久尹人网香蕉| 国产精品播放| 中文精品99久久国产香蕉| 亚洲美女在线观看| 欧美日韩国产大片| 亚洲欧美大片| 久久久91精品| 欧美高清视频www夜色资源网| 亚洲国产日韩综合一区| 亚洲人成高清| 国产精品视频一| 欧美一区二区三区免费视频| 欧美诱惑福利视频| 一区二区三区日韩精品视频| 亚洲欧美国产高清| 亚洲精品永久免费精品| 欧美一区二区三区在线播放| 亚洲国产欧洲综合997久久| 一区二区国产日产| 亚洲最快最全在线视频| 亚洲欧美日韩国产综合在线| 国产麻豆日韩欧美久久| 亚洲国产日韩一区| 亚洲国产精品久久久久久女王| 亚洲欧美春色| 欧美在线啊v一区| 国产精品稀缺呦系列在线| 亚洲精品一级| 国产精品老牛| 久久久久青草大香线综合精品| 欧美日本在线播放| 亚洲日本免费| 野花国产精品入口| 欧美午夜精品理论片a级按摩| 美日韩精品免费| 亚洲人成在线观看一区二区| 开元免费观看欧美电视剧网站| 久久免费视频一区| 国模大胆一区二区三区| 久久久久久香蕉网| 亚洲精品国产精品国自产在线|