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

山寨:不是最好的,是最適合我們的!歡迎體驗山寨 中文版MSDN

Blog @ Blog

當(dāng)華美的葉片落盡,生命的脈絡(luò)才歷歷可見。 -- 聶魯達

常用鏈接

統(tǒng)計

積分與排名

BBS

Blog

Web

最新評論

利用VC++與MSXML解析XML文檔


利用VC++MSXML解析XML文檔

一、文檔對象模型(DOM
  DOMDocument Object Model(文檔對象模型)的簡稱,是對XML文檔進行應(yīng)用開發(fā)、編程的應(yīng)用程序接口(API)。作為W3C公布的一種跨平臺、與語言無關(guān)的接口規(guī)范,DOM提供了在不同環(huán)境和應(yīng)用中的標準程序接口,可以用任何語言實現(xiàn)。
  DOM采用對象模型和一系列的接口來描述XML文檔的內(nèi)容和結(jié)構(gòu),即利用對象把文檔模型化。這種對象模型實現(xiàn)的基本功能包括:
  ● 描述文檔表示和操作的接口;
  ● 接口的屬性和方法;
  ● 接口之間的關(guān)系以及互操作。
  DOM可對結(jié)構(gòu)化的XML文檔進行解析,文檔中的指令、元素、實體、屬性等所有內(nèi)容個體都用對象模型表示,整個文檔被看成是一個有結(jié)構(gòu)的信息樹,而不是簡單的文本流,生成的對象模型就是樹的節(jié)點,對象同時包含了方法屬性。因此,對文檔的所有操作都是在對象樹上的進行。在DOM中,樹中的一切都是對象,不管是根節(jié)點還是實體的屬性。
  在DOM中主要有以下三個對象:
   XML文檔對象
XML文檔既是一種對象,同時又代表整個XML文檔。它由根元素子元素組成。
   XML節(jié)點對象
XML節(jié)點對象代表的是XML文檔內(nèi)部的節(jié)點,如元素、注釋、名字空間等。
  ● XML節(jié)點列表
XML文檔模塊列表代表了節(jié)點的集合。
  利用DOM,開發(fā)人員可以動態(tài)地創(chuàng)建XML文檔,遍歷結(jié)構(gòu),添加、修改、刪除內(nèi)容等。其面向?qū)ο蟮奶匦?,使人們在處?font face="Times New Roman">XML解析相關(guān)的事務(wù)時節(jié)省大量的精力,是一種符合代碼重用思想的強有力編程工具。

二、DOM的四個基本接口(引用自:http://bbs.xml.org.cn/dispbbs.asp?boardID=11&ID=9220)

DOM接口規(guī)范中,有四個基本的接口Document,Node,NodeList以及NamedNodeMap。在這四個基本接口 中,Document接口是對文檔進行操作的入口,它是從Node接口繼承過來的。Node接口是其他大多數(shù)接口的父類,象 Documet,Element,Attribute,Text,Comment等接口都是從Node接口繼承過來的。NodeList接口是一個節(jié)點的集合,它包含了某個節(jié)點中的所有子節(jié)點。NamedNodeMap接口也是一個節(jié)點的集合,通過該接口,可以建立節(jié)點名和節(jié)點之間的一一映射關(guān)系,從而利 用節(jié)點名可以直接訪問特定的節(jié)點。下面將對這四個接口分別做一些簡單的介紹。
 1Document接口

Document接口代表了整個XML/HTML文檔,因此,它是整棵文檔樹的根,提供了對文檔中的數(shù)據(jù)進行訪問和操作的入口。
由于元素、文本節(jié)點、注釋、處理指令等都不能脫離文檔的上下文關(guān)系而獨立存在,所以在Document接口提供了創(chuàng)建其他節(jié)點對象的方法,通過該方法創(chuàng)建的節(jié)點對象都有一個ownerDocument屬性,用來表明當(dāng)前節(jié)點是由誰所創(chuàng)建的以及節(jié)點同Document之間的聯(lián)系。

DOM樹中,Document節(jié)點是DOM樹中的根節(jié)點,也即對XML文檔進行操作的入口節(jié)點。通過Docuemt節(jié)點,可以訪問到文檔中的其他節(jié)點, 如處理指令、注釋、文檔類型以及XML文檔的根元素節(jié)點等等。另外,在一棵DOM樹中,Document節(jié)點可以包含多個處理指令、多個注釋作為其子節(jié) 點,而文檔類型節(jié)點和XML文檔根元素節(jié)點都是唯一的。

關(guān)于Document接口的IDLInterface Definition Language接口定義語言)定義和其中一些比較常用的屬性和方法的詳細介紹可以在MSDN中找到。
 2Node接口

Node接口在整個DOM樹中具有舉足輕重的地位,DOM接口中有很大一部分接口是從Node接口繼承過來的,例如,ElementAttrCDATASection等接口,都是從Node繼承過來的。在DOM樹中,Node接口代表了樹中的一個節(jié)點。
 3NodeList接口

NodeList接口提供了對節(jié)點集合的抽象定義,它并不包含如何實現(xiàn)這個節(jié)點集的定義。NodeList用于表示有順序關(guān)系的一組節(jié)點,比如某個節(jié)點的子節(jié)點序列。另外,它還出現(xiàn)在一些方法的返回值中,例如GetNodeByName

DOM中,NodeList的對象是"live"的,換句話說,對文檔的改變,會直接反映到相關(guān)的NodeList對象中。例如,如果通過DOM獲得一 個NodeList對象,該對象中包含了某個Element節(jié)點的所有子節(jié)點的集合,那么,當(dāng)再通過DOMElement節(jié)點進行操作(添加、刪除、改 動節(jié)點中的子節(jié)點)時,這些改變將會自動地反映到NodeList對象中,而不需DOM應(yīng)用程序再做其他額外的操作。

NodeList中的每個item都可以通過一個索引來訪問,該索引值從0開始。
 4NamedNodeMap接口

實現(xiàn)了NamedNodeMap接口的對象中包含了可以通過名字來訪問的一組節(jié)點的集合。不過注意,NamedNodeMap并不是從NodeList繼 承過來的,它所包含的節(jié)點集中的節(jié)點是無序的。盡管這些節(jié)點也可以通過索引來進行訪問,但這只是提供了枚舉NamedNodeMap中所包含節(jié)點的一種簡 單方法,并不表明在DOM規(guī)范中為NamedNodeMap中的節(jié)點規(guī)定了一種排列順序。
 NamedNodeMap表示的是一組節(jié)點和其唯一名字的一一對應(yīng)關(guān)系,這個接口主要用在屬性節(jié)點的表示上。

NodeList相同,在DOM中,NamedNodeMap對象也是"live"的。

三、MSXML
    從理論上說,根據(jù)XML的格式定義,我們可以自己編寫一個XML的語法分析器,但實際上微軟已經(jīng)給我們提供了一個XML語法解析器,即一個叫做 MSXML.DLL的動態(tài)鏈接庫,實際上它是一個COMComponent Object Model)對象庫,里面封裝了進行XML解析時所需要的所有對象。因為COM是一種以二進制格式出現(xiàn)的和語言無關(guān)的可重用對象,所以你可以用任何語言 (比如VBVC,DELPHIC++ Builder甚至是腳本語言等等)對它進行調(diào)用,在你的應(yīng)用中實現(xiàn)對XML文檔的解析。
   MSXML.DLL所包括的主要COM接口有:
   1. IXMLDOMDocument(Document接口)
DOMDocument對象是XML DOM的基礎(chǔ),你可以利用它所暴露的屬性和方法來瀏覽、查詢和修改XML文檔的內(nèi)容和結(jié)構(gòu)。DOMDocument表示了樹的頂層節(jié)點,它實現(xiàn)了DOM文 檔的所有的基本方法,并且提供了額外的成員函數(shù)來支持XSLXSLT。它創(chuàng)建了一個文檔對象,所有其他的對象都可以從這個文檔對象中得到和創(chuàng)建。
   2. IXMLDOMNode(Node接口)
   IXMLDOMNode是文檔對象模型(DOM)中的基本對象,元素、屬性、注釋、過程指令和其他的文檔組件都可以認為是IXMLDOMNode。事實上,DOMDocument對象本身也是一個IXMLDOMNode對象。
   3. IXMLDOMNodeList
   IXMLDOMNodeList實際上是一個節(jié)點(Node)對象的集合,節(jié)點的增加、刪除和變化都可以在集合中立刻反映出來,可以通過"for.循環(huán) "結(jié)構(gòu)來遍歷所有的節(jié)點。
   4. IXMLDOMParseError
   IXMLDOMParseError接口用來返回在解析過程中所出現(xiàn)的詳細的信息,包括錯誤號、行號、字符位置和文本描述。
  在具體應(yīng)用時可以用DOMDocumentLoad方法來裝載XML文檔,用IXMLDOMNode selectNodes(查詢的結(jié)果有多個,得到存放搜索結(jié)果的鏈表)或selectSingleNode(查詢的結(jié)果有一個,在有多個的情況下返回找 到的第一個節(jié)點)方法進行查詢,用createNodeappendChild方法來創(chuàng)建節(jié)點和追加節(jié)點,用IXMLDOMElement的 setAttributegetAttribute方法來設(shè)置和獲得節(jié)點的屬性。

四、編程舉例

1、目標文檔:  

<book id="bk101">
      
<author>lizlex</author>
      
<title>XML Developer's Guide</title>
 </book>

2、步驟:

(
1)在StdAfx.h中引入動態(tài)鏈接庫 MSXML.DLL(C:\windows\system32\msxml4.dll)
 #import 
<msxml4.dll>

(
2)界面設(shè)計:
分別放入三個Text,用于輸入數(shù)據(jù),與顯示文檔內(nèi)容用,并添加關(guān)聯(lián)的成員變量m_strId,m_strAuthor, m_strTitle;并添加確定按鈕:

(
3)產(chǎn)生文檔的程序片斷
void CXmlparseDlg::OnButtonGenerate()
 {
     UpdateData();
     
     MSXML2::IXMLDOMDocumentPtr pDoc;
     MSXML2::IXMLDOMElementPtr  xmlRoot ;
     
     
//創(chuàng)建DOMDocument對象
     HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
     
if(!SUCCEEDED(hr))
     {  
         MessageBox(
"無法創(chuàng)建DOMDocument對象,請檢查是否安裝了MS XML Parser 運行庫!");
         
return ;
     }
     
     
//根節(jié)點的名稱為Book
     
//創(chuàng)建元素并添加到文檔中
     xmlRoot=pDoc->createElement((_bstr_t)"Book");
     
     
//設(shè)置屬性
     xmlRoot->setAttribute("id",(const char *)m_strId);
     pDoc
->appendChild(xmlRoot);
     MSXML2::IXMLDOMElementPtr pNode;
     
     
//添加“author”元素
     pNode=pDoc->createElement((_bstr_t)"Author");
     pNode
->Puttext((_bstr_t)(const char *)m_strAuthor);
     xmlRoot
->appendChild(pNode);
     
     
//添加“Title”元素
     pNode=pDoc->createElement("Title");
     pNode
->Puttext((const char *)m_strTitle);
     xmlRoot
->appendChild(pNode);
     
     
//保存到文件
     
//如果不存在就建立,存在就覆蓋
     pDoc->save("d:\\he.xml");
     
 }

(
4)讀取XML文檔的程序片斷
void CXmlparseDlg::OnButtonLoad()
{
    MSXML2::IXMLDOMDocumentPtr pDoc;
    HRESULT hr;
    hr
=pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
    
if(FAILED(hr))
    {  
        MessageBox(
"無法創(chuàng)建DOMDocument對象,請檢查是否安裝了MS XML Parser 運行庫!");
        
return ;
    }
    
    
//加載文件
    pDoc->load("d:\\he.xml");
    
    MSXML2::IXMLDOMNodePtr  pNode;
    
    
//在樹中查找名為Book的節(jié)點,"//"表示在任意一層查找
    pNode=pDoc->selectSingleNode("//Book");
    
    MSXML2::DOMNodeType nodeType;
    
    
//得到節(jié)點類型
    pNode->get_nodeType(&nodeType);
    
    
//節(jié)點名稱
    CString strName;
    
    strName
=(char *)pNode->GetnodeName();
    
    
//節(jié)點屬性,放在鏈表中
    MSXML2::IXMLDOMNamedNodeMapPtr pAttrMap=NULL;
    MSXML2::IXMLDOMNodePtr   pAttrItem;
    _variant_t variantValue;
    pNode
->get_attributes(&pAttrMap);
    
    
long count;
    count
=pAttrMap->get_length(&count);
    
    pAttrMap
->get_item(0,&pAttrItem);
    
//取得節(jié)點的值
    pAttrItem->get_nodeTypedValue(&variantValue);
    m_strId
=(char *)(_bstr_t)variantValue;
    
    UpdateData(FALSE);
    
}

posted on 2009-06-13 19:25 isabc 閱讀(2169) 評論(0)  編輯 收藏 引用 所屬分類: ATL COM


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


廣告信息(免費廣告聯(lián)系)

中文版MSDN:
歡迎體驗

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            在线观看亚洲一区| 欧美黄污视频| 久久蜜桃精品| 亚洲精品国产精品久久清纯直播 | 欧美激情国产日韩精品一区18| 欧美一区二区三区在线观看视频| 激情六月婷婷久久| 亚洲欧洲精品成人久久奇米网| 欧美午夜片在线免费观看| 久久久免费精品视频| 欧美日本乱大交xxxxx| 久久久久免费视频| 欧美日韩在线看| 欧美成人三级在线| 国产欧美日韩一区| 99国产精品99久久久久久粉嫩| 狠色狠色综合久久| 亚洲一区二区三区中文字幕| 亚洲乱码国产乱码精品精| 欧美在线在线| 欧美一区网站| 国产精品大全| 亚洲精品中文字幕在线| 黑人巨大精品欧美黑白配亚洲| 一区二区日韩精品| 亚洲精品1区| 麻豆久久精品| 卡一卡二国产精品| 国产精品自拍一区| 亚洲无限av看| 亚洲永久精品国产| 欧美日韩二区三区| 亚洲国产三级网| 亚洲国产精品成人精品| 久久精品视频播放| 欧美一区二区三区的| 欧美午夜视频网站| 日韩亚洲欧美精品| 日韩午夜在线视频| 欧美成人按摩| 亚洲国产精品va在线看黑人 | 亚洲欧美韩国| 亚洲一区国产| 欧美无乱码久久久免费午夜一区| 亚洲国产婷婷香蕉久久久久久| 极品少妇一区二区三区| 久久www成人_看片免费不卡| 欧美在线视频观看免费网站| 国产精品区一区二区三| 亚洲在线电影| 久久精品123| 国产永久精品大片wwwapp| 欧美一二三区精品| 久久婷婷av| 在线观看亚洲精品视频| 久久青青草原一区二区| 久久久在线视频| 久久综合色综合88| 欧美激情a∨在线视频播放| 亚洲人体大胆视频| 欧美激情国产日韩| 亚洲国产日韩精品| 亚洲国产成人久久综合| 久久大逼视频| 久久亚洲欧洲| 亚洲第一精品影视| 蜜月aⅴ免费一区二区三区| 亚洲第一区色| 亚洲最黄网站| 国产精品久久久久久户外露出| 亚洲香蕉成视频在线观看| 香蕉久久久久久久av网站| 国产欧美亚洲精品| 性欧美超级视频| 欧美99久久| 中文欧美日韩| 国产精品网站一区| 久久视频这里只有精品| 亚洲人成在线观看一区二区| 亚洲免费人成在线视频观看| 国产日产欧美a一级在线| 久久成年人视频| 亚洲电影天堂av| 亚洲午夜精品久久| 国产一区二区成人| 久久亚洲欧洲| 一区二区三区视频在线观看 | 午夜精品视频在线观看一区二区| 久久婷婷色综合| 亚洲毛片在线看| 国产精品美女在线观看| 久久青草久久| 中国日韩欧美久久久久久久久| 久久久久国产一区二区三区| 亚洲二区三区四区| 国产精品入口尤物| 欧美成人久久| 欧美在线观看一区二区| 亚洲精品乱码久久久久久按摩观| 欧美诱惑福利视频| 99一区二区| 激情久久久久久| 国产精品久久网站| 欧美激情欧美狂野欧美精品| 欧美在线3区| 亚洲色在线视频| 亚洲国产专区校园欧美| 久久偷看各类wc女厕嘘嘘偷窃| 国产精品99久久久久久www| 亚洲第一成人在线| 国产一级揄自揄精品视频| 欧美日韩国产区| 欧美成人蜜桃| 玖玖视频精品| 久久大综合网| 亚洲一区二区三| 在线亚洲国产精品网站| 91久久精品美女| 欧美国产视频一区二区| 久久久久在线观看| 欧美在线亚洲一区| 亚洲欧美成人综合| 亚洲视频精选| 99精品久久久| 亚洲破处大片| 最新热久久免费视频| 夜夜爽99久久国产综合精品女不卡 | 亚洲国产黄色| 黑人中文字幕一区二区三区| 国产精品久久久一本精品| 欧美高清视频一区| 免费成人小视频| 久久婷婷久久| 久久精品免费观看| 欧美在线免费观看亚洲| 午夜在线a亚洲v天堂网2018| 亚洲综合大片69999| 亚洲综合第一| 性色av一区二区怡红| 亚洲一区二区三区中文字幕在线| 亚洲一区二区三区午夜| 亚洲一区三区电影在线观看| 午夜精品国产| 欧美一区二区三区免费观看视频| 亚洲男人第一av网站| 香蕉乱码成人久久天堂爱免费 | 亚洲一品av免费观看| 亚洲在线观看| 欧美在线网址| 免费成人毛片| 欧美激情亚洲视频| 亚洲精品少妇| 亚洲视频免费在线| 欧美一级黄色网| 久久这里只有| 欧美日韩美女一区二区| 国产精品女人毛片| 好吊色欧美一区二区三区视频| 悠悠资源网久久精品| 91久久久国产精品| 亚洲色图在线视频| 先锋a资源在线看亚洲| 久久久久9999亚洲精品| 欧美激情精品久久久久久变态| 99riav久久精品riav| 校园激情久久| 欧美精品粉嫩高潮一区二区 | 亚洲经典三级| 亚洲一区中文| 久久久噜噜噜久久久| 欧美久久久久久久久久| 国产精品久久久久久久久久久久| 国产主播喷水一区二区| 亚洲巨乳在线| 久久成人免费网| 亚洲精华国产欧美| 午夜精品成人在线| 美女主播精品视频一二三四| 国产精品va在线| 永久域名在线精品| 亚洲制服av| 欧美1区2区3区| 99热精品在线| 久久琪琪电影院| 国产精品久久久久aaaa九色| 樱桃国产成人精品视频| 亚洲欧美日韩爽爽影院| 欧美承认网站| 亚洲欧美日韩在线观看a三区| 农村妇女精品| 国产亚洲欧美日韩一区二区| 在线亚洲电影| 欧美国产第一页| 午夜精品视频一区| 欧美日韩视频免费播放| 亚洲国产高清视频| 久久精品色图| 亚洲一区区二区| 欧美亚洲成人精品| 亚洲精品五月天|