c++中的xml解析

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原理也是一樣的。  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章