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

笑看風云淡

寵辱不驚,看庭前花開花落;去留無意,望天空云卷云舒
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网站| 欧美亚洲日本网站| 一区二区三区视频在线观看| 欧美视频一区二区三区在线观看| 99re成人精品视频| 在线视频精品一区| 国产日韩欧美不卡| 美女国产精品| 欧美精品18videos性欧美| 亚洲在线国产日韩欧美| 亚洲欧美日韩精品久久| 伊人久久婷婷色综合98网| 亚洲国产精品久久91精品| 欧美日韩理论| 久久国产精品亚洲77777| 久久色在线播放| 亚洲天堂av在线免费观看| 午夜一区不卡| 亚洲精品你懂的| 亚洲综合成人在线| 在线观看亚洲精品视频| 亚洲人成网站精品片在线观看| 欧美日韩免费看| 久久精品视频在线观看| 免费不卡视频| 午夜久久tv| 欧美高清视频www夜色资源网| 在线视频欧美日韩| 久久成人在线| 一本色道久久综合亚洲精品高清 | 伊人一区二区三区久久精品| 亚洲国产经典视频| 国产精品视频一区二区高潮| 欧美黑人一区二区三区| 国产精品国产成人国产三级| 欧美电影电视剧在线观看| 欧美午夜寂寞影院| 欧美成人69av| 国产主播一区| 亚洲天堂第二页| 亚洲精品国产视频| 欧美一区二区三区电影在线观看| 在线亚洲成人| 美女91精品| 久久久999精品免费| 欧美日韩专区| 亚洲精品人人| 亚洲啪啪91| 久久一本综合频道| 久久狠狠久久综合桃花| 欧美视频专区一二在线观看| 欧美激情在线免费观看| 狠狠干综合网| 午夜精品影院| 欧美在线高清| 国产精品爽黄69| 亚洲一区免费视频| 亚洲欧美春色| 欧美吻胸吃奶大尺度电影| 亚洲高清成人| 亚洲国产cao| 久久久久久伊人| 久久九九精品99国产精品| 国产精品一区二区久久精品| 亚洲美女精品久久| 99精品热视频只有精品10| 猛男gaygay欧美视频| 欧美xxx在线观看| 影音国产精品| 免费欧美高清视频| 欧美激情女人20p| 亚洲美女免费精品视频在线观看| 久久午夜电影| 91久久精品国产91久久| 亚洲精品激情| 欧美日韩免费精品| 亚洲性视频h| 久久gogo国模裸体人体| 国产一区av在线| 久久久www成人免费精品| 麻豆精品在线视频| 91久久久久久国产精品| 欧美精品91| 亚洲社区在线观看| 久久本道综合色狠狠五月| 国内精品久久久久影院 日本资源| 久久精品国产999大香线蕉| 欧美xxx在线观看| 一区二区日韩伦理片| 国产精品乱子久久久久| 欧美一区二区在线免费观看| 鲁大师成人一区二区三区| 亚洲精品综合久久中文字幕| 欧美日韩中字| 久久精品视频免费播放| 亚洲黄色尤物视频| 欧美亚洲免费| 亚洲激情电影在线| 欧美午夜不卡视频| 久久久免费av| 制服诱惑一区二区| 美女精品网站| 亚洲欧美日韩国产一区二区三区| 国产欧美69| 欧美电影免费观看高清完整版| 日韩一二三在线视频播| 久久精品最新地址| 日韩亚洲在线| 黄色免费成人| 国产精品久久久久高潮| 玖玖国产精品视频| 亚洲欧美国产不卡| 亚洲人体偷拍| 欧美成人69| 久久精品国产亚洲aⅴ| 日韩午夜电影| 亚洲国产精品小视频| 国产精品网红福利| 欧美精品二区| 裸体女人亚洲精品一区| 亚洲欧美另类中文字幕| 亚洲卡通欧美制服中文| 免费久久精品视频| 久久精品国产精品| 亚洲一区精彩视频| 夜夜爽99久久国产综合精品女不卡 | 免费成人在线观看视频| 亚洲欧美成人一区二区在线电影| 亚洲日本欧美日韩高观看| 国产午夜精品麻豆| 国产精品女主播| 欧美日韩在线不卡一区| 欧美国产激情二区三区| 久久伊人免费视频| 久久国产精品久久久久久电车| 一区二区三区国产精品| 亚洲精品孕妇| 最近看过的日韩成人| 亚洲第一色在线| 欧美成人在线影院| 女女同性女同一区二区三区91| 久久成人国产| 久久九九热免费视频| 欧美亚洲日本一区| 久久国产婷婷国产香蕉| 久久不射2019中文字幕| 欧美一区二区三区播放老司机| 亚洲亚洲精品三区日韩精品在线视频| 亚洲精品一区二| 这里只有精品丝袜| 亚洲视频在线看| 亚洲欧美激情精品一区二区| 亚洲免费在线视频| 欧美一区二区性| 久久五月天婷婷| 欧美成在线视频| 亚洲激情一区| 亚洲天堂黄色| 久久www免费人成看片高清| 久久久久网站| 欧美成人国产va精品日本一级| 欧美高清视频免费观看| 欧美四级在线| 国产曰批免费观看久久久| 亚洲国产乱码最新视频| 一区二区免费在线视频| 午夜视频久久久久久| 久久久久久高潮国产精品视| 欧美电影在线免费观看网站| 亚洲激情欧美激情| 一区二区三区四区五区精品视频| 亚洲一级一区| 久久尤物视频| 欧美日韩三级视频| 国产一区二区三区av电影| 亚洲国产精品欧美一二99| 亚洲一区二区视频| 免费人成精品欧美精品| 99re8这里有精品热视频免费| 亚洲午夜久久久久久久久电影院| 久久国产一二区| 欧美区一区二| 精品不卡一区二区三区| 中文一区字幕| 免费在线观看精品| 一本色道久久综合狠狠躁篇怎么玩| 香蕉久久国产| 欧美美女福利视频| 国外视频精品毛片| 亚洲一区二区高清视频| 蜜桃av一区二区三区| 亚洲午夜伦理| 嫩草国产精品入口| 国产视频在线观看一区| 亚洲视频一区在线| 欧美丰满少妇xxxbbb| 性感少妇一区| 国产精品第一区| 亚洲精品久久久久久一区二区|