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

山寨:不是最好的,是最適合我們的!歡迎體驗山寨 中文版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>
            国产精品夜夜嗨| 亚洲男人的天堂在线| 亚洲免费不卡| 亚洲美女啪啪| 欧美~级网站不卡| 欧美77777| 欧美国产视频一区二区| 欧美日韩一区综合| 国产精品久久久久毛片软件 | 一区二区三区高清不卡| 一区二区三区高清| 性娇小13――14欧美| 久久久无码精品亚洲日韩按摩| 免费一级欧美片在线播放| 欧美日本韩国一区| 国产日产亚洲精品| 亚洲国产一区在线观看| 99香蕉国产精品偷在线观看| 亚洲一区二区av电影| 久久久久久亚洲精品不卡4k岛国| 免费成人av在线| 亚洲精品美女在线观看播放| 一区二区激情视频| 久久一区二区三区四区五区| 欧美日韩不卡合集视频| 国产乱码精品一区二区三区av| 在线精品高清中文字幕| 亚洲欧美在线播放| 亚洲国产精品女人久久久| 亚洲一区二区三区四区在线观看 | 国产精品综合av一区二区国产馆| 亚洲动漫精品| 久久国产精品亚洲va麻豆| 亚洲肉体裸体xxxx137| 欧美在线你懂的| 欧美日韩午夜在线| 亚洲国产欧美日韩另类综合| 欧美一级欧美一级在线播放| 亚洲国产日韩欧美| 久久女同互慰一区二区三区| 国产精品蜜臀在线观看| 亚洲日产国产精品| 另类综合日韩欧美亚洲| 亚洲欧美精品| 国产精品久久久久久影院8一贰佰| 亚洲精品欧美专区| 亚洲深夜福利| 欧美经典一区二区| 在线免费日韩片| 久久久精品一区二区三区| 夜夜精品视频一区二区| 欧美日本高清| 亚洲九九精品| 亚洲国产精品第一区二区三区| 久久精品五月| 韩国av一区| 久久免费高清视频| 久久国产精品黑丝| 国产真实久久| 麻豆精品一区二区av白丝在线| 欧美一区1区三区3区公司| 国产乱码精品一区二区三区不卡 | 国产日韩欧美综合精品| 性欧美大战久久久久久久久| 亚洲午夜精品久久久久久app| 欧美啪啪一区| 亚洲少妇中出一区| 日韩亚洲国产精品| 国产精品多人| 久久国产精品黑丝| 久久精品毛片| 亚洲激情亚洲| 99视频超级精品| 国产精品捆绑调教| 久久人人爽人人爽爽久久| 久久久天天操| 亚洲美女啪啪| 亚洲午夜精品久久久久久浪潮| 国产伦精品一区二区三区视频黑人| 欧美在线播放| 免费观看成人鲁鲁鲁鲁鲁视频| 99精品热6080yy久久| 亚洲一级黄色av| 激情小说亚洲一区| 亚洲片国产一区一级在线观看| 欧美日韩亚洲国产精品| 欧美在线视频免费播放| 久久亚洲私人国产精品va| 99精品国产在热久久婷婷| 一本大道久久a久久综合婷婷| 夜夜狂射影院欧美极品| 国产日韩一区欧美| 欧美高清在线观看| 国产精品狼人久久影院观看方式| 久久亚洲捆绑美女| 欧美日韩国产精品自在自线| 欧美一区二区视频在线| 免费高清在线一区| 欧美亚洲免费电影| 欧美成人免费网站| 欧美一区日本一区韩国一区| 女主播福利一区| 久久国产加勒比精品无码| 欧美国产综合视频| 在线播放豆国产99亚洲| 91久久精品国产| 国产亚洲欧美一区二区三区| 亚洲国产mv| 狠狠狠色丁香婷婷综合久久五月| 日韩亚洲视频在线| 亚洲欧洲一区二区在线观看| 性一交一乱一区二区洋洋av| 一区二区高清视频| 老色批av在线精品| 久久久久久夜精品精品免费| 国产精品yjizz| 最新国产拍偷乱拍精品 | 亚洲精品国产精品国自产观看| 亚洲一区二区视频| 一区二区三区视频观看| 模特精品裸拍一区| 久热精品视频在线| 国产一区二区三区在线观看视频| 99re热这里只有精品免费视频| 亚洲高清视频在线观看| 久久er99精品| 久久久www成人免费精品| 国产精品专区h在线观看| 日韩一区二区精品| 国产精品99久久久久久白浆小说| 欧美成人午夜视频| 欧美肥婆在线| 影音欧美亚洲| 久久免费观看视频| 久久视频精品在线| 激情综合自拍| 欧美在线观看视频| 久久久久中文| 韩国v欧美v日本v亚洲v| 久久精品一区二区国产| 久久综合中文色婷婷| 亚洲综合色自拍一区| 亚洲欧美激情一区| 欧美性生交xxxxx久久久| 中文一区在线| 欧美一区二区日韩一区二区| 国产啪精品视频| 久久久国产午夜精品| 美女日韩欧美| 91久久精品一区二区三区| 久久野战av| 亚洲大片精品永久免费| 日韩亚洲综合在线| 欧美日韩一区二区国产| 亚洲视频在线视频| 久久精选视频| 亚洲片在线观看| 欧美三日本三级少妇三2023| 亚洲午夜精品久久久久久浪潮| 欧美一区二区三区免费在线看| 国产网站欧美日韩免费精品在线观看| 香蕉久久精品日日躁夜夜躁| 另类av导航| 在线亚洲高清视频| 国产精品亚洲а∨天堂免在线| 欧美在线免费视屏| 亚洲欧洲精品成人久久奇米网| 亚洲素人在线| 狠狠色狠色综合曰曰| 欧美精品亚洲精品| 亚洲欧美视频一区| 欧美激情aⅴ一区二区三区| 欧美性久久久| 久久国产手机看片| 亚洲黄色精品| 欧美中文字幕视频| 亚洲精品视频中文字幕| 国产精品久久7| 久久久久久精| av不卡在线看| 欧美肥婆bbw| 欧美在线综合视频| 亚洲美女淫视频| 激情久久久久久| 欧美性做爰毛片| 欧美91精品| 久久精品99| 正在播放欧美一区| 亚洲欧洲日夜超级视频| 久久亚洲精品中文字幕冲田杏梨| 亚洲一区欧美激情| 亚洲精品影院| 国内精品久久久久影院色| 欧美手机在线视频| 欧美成人精品在线播放| 久久国产欧美精品| 校园激情久久| 亚洲一品av免费观看| 日韩视频二区| 最新国产精品拍自在线播放|