XML 初級教程(一)
作者:我本楚狂人
下載原始碼
一、XML是什嗎?
XML即extensibe markup language的縮寫,也就是可擴充標識語言。
它是作為一種通用資料結構而出現的,儘管它曾被認為取代html。
實際上我們可以將其看作"文本資料庫" 。 XML檔案通常需要一個驗證檔案,就像資料庫的字元段表一樣。常用的為DTD檔案,現在比較流行的為XSL檔案。
二、解析XML的方法
使用C++解析XML的最大好處是速度快,特別是大量資料時。
XML不像html有固定的標記,沒有固定的解析器如IE或Netscape可以解析XML真正含義。 我們需要自己編寫一段程式做這樣的事情。
就像我們可以用ODBC/ADO讀取資料庫一樣,我們可以用SAX/DOM解析XML檔案。
三、SAX vs DOM
SAX是基於事件驅動的, 通過判斷每一行資料的類型(節點/元素/其他)而決定如何處理。DOM則對XML檔案整體產生一個樹狀結構,很顯然DOM更實用一些,因為可隨時讀取文檔任意節點資料,但其對記憶體要求大一些。SAX會快一些,因為解析時只儲存當前行的資訊。不管用那種方法解析出的資料都需要我們決定其用途,例如一個含圖形資料XML,就需要調用GDI函數根據解析出來的資料畫圖。
SAX簡介:
startDocument(); //開啟XML文檔;startElementz();//處理XML資料;endElement(); endDocument(); //關閉XML文檔;
例子:
假設XML檔案,<?xml version="1.0"?><parts><part>TurboWidget</part></parts> SAX處理分析過程;StartDocument( )StartElement( "parts" )StartElement( "part" )Characters( "TurboWidget" )EndElement( "part" )EndElement( "parts" )EndDocument( )
DOM簡介:
例子:
IXMLDOMDocument* pDoc;//XML文檔Object;CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument, (void**)&pDoc); XMLDOMNode * pNode;//XML節點Object;pDoc->QueryInterface(IID_IXMLDOMNode,(void**)(&pNode));
資料處理(可以是遞迴函式):
GetChildItem(); //獲得子節點 節點處理: get_nodeName();//節點名 get_nodeTypeString();//節點含資料 get_nodeType();//節點類型
四、最後提供一個DOM程式例子,該例子僅僅能產生XML的樹狀圖,沒有更多處理。 更多內容將在以後發布。
五、希望能給大家協助,歡迎大家批評指正,具體請看原始碼。使用開發包為MSXML3,當然用Apache Xerces原理也是一樣的。