国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
VC 中利用MSXML解析XML文檔
1、 XML 簡介
  XML(Xtensible Markup Language,即擴展標(biāo)記語言)的發(fā)展起源于1996年。當(dāng)時,出版界巨頭和Web業(yè)內(nèi)人士經(jīng)過共同討論,提出了創(chuàng)建SGML(Standard Generalized Markup Language,即標(biāo)準通用標(biāo)識語言)子集(HML)的建議。該子集專用于Web,具有可擴展(或可擴充)性,并且能利用結(jié)構(gòu)化標(biāo)記語言的所有高級功 能,但摒棄了SGML的復(fù)雜性。XML規(guī)范的第一份草稿于1996年11月發(fā)布后不久,1997年1月首個XML解析器就面世了。隨后,便出現(xiàn)了XML的 應(yīng)用以及新的規(guī)范和解析器。
  HTML(Hypertext Markup Language)語言是大家所熟悉的開發(fā)網(wǎng)頁的一種標(biāo)記語言,但它不是一種編程語言,它的主要標(biāo)記是針對文檔內(nèi)容本身結(jié)構(gòu)的描述,因機器本身是不能夠解 析它的內(nèi)容的。XML語言是SGML語言的子集,它保留了SGML主要的使用功能,同時大大減小了SGML的復(fù)雜性。它不僅能表示文檔的內(nèi)容,而且可以表 示文檔的結(jié)構(gòu),這樣在能夠被人類理解的同時,也能夠被機器所理解。雖然HTML是SGML的一個應(yīng)用,XML是SGML的一個子集,但是XML絕不是在 HTML上添加某些元素而形成的,它們之間是有很大區(qū)別的。最大的區(qū)別就是XML允許使用者為某種特殊目的而定義自已的元素。除此之外,另一個最主要的區(qū) 別就是XML致力解決的問題,正是在使用HTML時所遇到的一些特殊問題。
  XML要求遵循一定的嚴格標(biāo)準,其分析程序比HTML瀏覽器對語法和結(jié)構(gòu)的要求更加嚴格。XML文檔每次分析的結(jié)果都一致,而HTML在不同的瀏覽器 中可能會作出不同的分析和顯示。同時,XML標(biāo)準是對數(shù)據(jù)的處理應(yīng)用,而不只是針對Web頁的,它還可涉及到數(shù)據(jù)庫電子商務(wù)系統(tǒng),以及任何顯示系統(tǒng)的高級 應(yīng)用。開發(fā)者可根據(jù)特定的工業(yè)需求,利用XML創(chuàng)建自定義的數(shù)據(jù)結(jié)構(gòu)。這些數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)庫可以在許多設(shè)備上查看,而不需要使用自定義的接口在不同的顯示 設(shè)備上查看相同的數(shù)據(jù)。
  XML主要有三個要素:文檔類型聲明(DTD:Document Type Declaration)或XML Schema(XML大綱)、可擴展樣式語言(XSL:eXtensible Stylesheet Language)和可擴展鏈接語言(XLink:eXtensible Link Language)。DTD和XML大綱規(guī)定了XML文件的邏輯結(jié)構(gòu),定義了XML文件中的元素、元素的屬性以及元素與元素屬性之間的關(guān)系; Namespace(名域)實現(xiàn)了統(tǒng)一的XML文檔數(shù)據(jù)表示以及數(shù)據(jù)的相互集成;XSL是用于規(guī)定XML文檔呈現(xiàn)樣式的語言,它使得數(shù)據(jù)與其表現(xiàn)形式相互 獨立,比如XSL能使Web瀏覽器改變文檔的表示法,如數(shù)據(jù)顯示順序的變化,不需要再與服務(wù)器進行通訊。通過改變樣式表,同一個文檔可以顯示得更大,或者 經(jīng)過折疊只顯示外面的一層,或者可以變?yōu)榇蛴〉母袷?。而XLink 將進一步擴展目前Web上已有的簡單鏈接。

  二、文檔對象模型(DOM)
  DOM是Document Object Model(文檔對象模型)的簡稱,是對Web文檔進行應(yīng)用開發(fā)、編程的應(yīng)用程序接口(API)。作為W3C公布的一種跨平臺、與語言無關(guān)的接口規(guī)范,DOM提供了在不同環(huán)境和應(yīng)用中的標(biāo)準程序接口,可以用任何語言實現(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ū)ο蟮奶匦?,使人們在處理XML解析相關(guān)的事務(wù)時節(jié)省大量的精力,是一種符合代碼重用思想的強有力編程工具。

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

  四、程序?qū)崿F(xiàn)
  下面通過一個具體的實例來說明在VC++中如何利用MSXML解析XML文檔。
 ?。?)源XML文檔(xmlfile.xml)如下:
  <?xml version="1.0" encoding="GB2312"?>
  <Device id="10041" name="設(shè)備1">
  <Type>13</Type>
  <TypeName>保護</TypeName>
  </Device>
  我們在源文檔中查找"Device",將其"name"屬性設(shè)置為"測試設(shè)備",為其添加"Model"節(jié)點,并設(shè)置其文本為"3"。
  (2)源程序如下:
  CoInitialize(NULL); // 初始化COM。
  CComPtr<IXMLDOMDocument> spXMLDOM;
  HRESULT hr=spXMLDOM.CoCreateInstance (_uuidof(DOMDocument));
  // 創(chuàng)建解析器實例。
  VARIANT_BOOL bSuccess=false;
  hr=spXMLDOM->load(CComVariant(L"xmlfile.xml"),&bSuccess);
  // 裝載XML文檔。
  CComBSTR bstrSS(L"Device");
  CComPtr<IXMLDOMNode> spDevice;
  hr=spXMLDOM->selectSingleNode(bstrSS,&spDevice); //搜索"Device"。
  CComQIPtr<IXMLDOMElement> spDev;
  spDev=spDevice;
  // 設(shè)置"Device"的"name"屬性。
  hr= spDev ->setAttribute(CComBSTR(L"name"),CComVariant("測試設(shè)備"));
  CComPtr<IXMLDOMNode> spModelNode; hr=spXMLDOM->createNode(CComVariant(NODE_ELEMENT),ComBSTR
 ?。?Model"),NULL,& spModelNode); // 創(chuàng)建"Model"節(jié)點。
  CComPtr<IXMLDOMNode> spInsertedNode;
  hr=spDevice->appendChild (spModelNode,&spInsertedNode);
  // 添加新節(jié)點到"Device"節(jié)點下面。
  CString strID="3";
  hr=spInsertedNode->put_text(strID.AllocSysString());// 設(shè)置"Model"的文本。
  hr=spXMLDOM->save(CComVariant("xmlfile.xml")); / /保存文檔。
  CoUninitialize(); // 結(jié)束對COM的使用。
  因為篇幅的原因,上述代碼的每步操作并未對返回的HRESULT類型進行判斷,也未進行異常的捕獲處理,在實際的編程中讀者應(yīng)根據(jù)返回的hr進行決斷,以決定程序的流程,同時應(yīng)進行異常的捕獲處理。
  (3) 修改后的XML文檔如下
  <?xml version="1.0" encoding="GB2312"?>
  <Device id="10041" name="測試設(shè)備">
  <Type>13</Type>
  <TypeName>保護</TypeName>
  <Model>3</Model>
  </Device>

  五、結(jié)束語
  因為XML文檔有著比HTML更嚴格的語法要求,所以使用和編寫一個XML解析器要比編寫一個HTML解析器要容易得多。同時因為XML文檔不僅可以 標(biāo)記文檔的顯示屬性,更重要的是它標(biāo)記了文檔的結(jié)構(gòu)和包含信息的特征,所以我們可以方便地通過XML解析器來獲取特定節(jié)點的信息并加以顯示或修改,方便了 用戶對XML文檔的操作和維護。同時我們需要注意的是,XML是一種開放的結(jié)構(gòu)體系,并不依賴于任何一家公司,所以開發(fā)基于XML的應(yīng)用必然會得到絕大多 數(shù)軟件開發(fā)平臺的支持。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
使用 MSXML 分析器處理 XML 文檔
VB和VB.NET中的XML操作(2)
利用MSXML解析XML文本--浪沙
<VB.net|xml>VB和VB.NET中的XML操作(詳細介紹)
【轉(zhuǎn)】msxml 操作xml
XML DOM介紹
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服