CMarkup與XML(一)

 

最近研究XML比較多,剛剛研究了MSXML,現在再來看看一個比較簡單的解析器-CMarkup。以下均是本人從網上搜集的,然後整理到了一起,這應該不算侵權吧,哈哈!

閒話結束,轉入正題:

 

Cmarkup是基於壓縮文檔對象模型(EDOM"Encapsulated" Document Object Model),這是這個簡單XML處理器的關鍵。它的一套XML處理方法和產生的效果與DOM(Document Object Model)是一樣的。但是整個DOM有無數的對象類型,而EDOM只定義了一個對象:XML文檔,EDOM回到了XML原始的吸引力簡單。關於方法的完整文檔,請看EDOM Specification

CmarkUp封裝了XML文檔文本、結構和當前位置。它提供了增加元素、導航和得到元素屬性和數據的所有方法。在文檔中操作被執行的地方取決於當前位置和當前孩子位置。當前位置允許你增加一個元素到文檔中的這個位置,而不需要明確指出增加對象到文檔的這點上,在CMarkup的有效生命週期裏,對象一直保持着一個用來描述文檔的字符串,當你調用GetDoc()可以得到它。 

1. 創建一個XML文檔

對於創建一個XML文檔,需要實例化一個CMarkup對象,並調用AddElem創建根元素。在這個位置,如果你調用 AddElem("ORDER"),你的文檔會簡單的裝一個空ORDER元素<ORDER/>然後調用AddChildElem在根元素的下面創建元素 (例如:進入根元素內部,層次表示)下面的示例代碼創建一個XML文檔並返回它(的內容)到一個字符串中。

 

這些代碼產生了下面的XML,這個根結點是ORDER元素;注意它的開始標籤<ORDER> 在開頭,結束標籤</ORDER>在結尾。當一個元素是在一個父下面(深入或被包含),這個父元素的開始標籤要在它之前,結束標籤要在它之後。ORDER元素包含一個ITEM元素,而ITEM元素包含了三個字子元素:SNNAMEQTY

<ORDER>

<ITEM>

<SN>132487A-J</SN>

<NAME>crank casing</NAME>

<QTY>1</QTY>

</ITEM>

</ORDER>

如例子中所顯示的,你也能夠在一個子元素下創建新元素,這需要調用IntoElem 移動你的當前主位置到當前子元素位置,然後你就可以在這下面增加一個子元素了。CMarkup在索引中保持了一個當前位置指針,以保證你的源碼更加短和更簡單,當導航文件時,相同的邏輯位置也會被使用。

2. 導航XML文檔

上面的例子所創建的XML字符串,用SetDoc方法加入到CMarkup對象中能夠被解析,你也可以引導它正確的進入被創建的同一個CMarkup對象中,如果你要設置當前位置到文檔的開始時,需要調用ResetPos.

在下面的例子中,從csXML字符串生成CMarkup對象後,我們循環ORDER元素下的所有ITEM元素,並得到每個項目的序號和數量。

 

對於我們發現的每個元素,在查詢它了子元素之前要調用IntoElem,查詢完之後再調用OutOfElem ,當你習慣於這種導航類型時,你將知道,檢查你的循環時,要確定每個IntoElem 調用都有一個與之對應的OutOfElem 調用 。

3. 增加元素和屬性

上面創建文檔的例子中僅創建了一個ITEM元素,現在這個例子是創建多個項目,從前一個內容加裁後,再增加數據源,加上SHIPMENT信息元素中有一個屬性,這段代碼也演示了你能調用調用IntoElemAddElem來代替AddChildElem,函數調用。雖然這意味着更多的調用,但許多人認爲這樣更直觀。

 

這段代碼產生了下面的XML,根元素ORDER包含兩個ITEM元素和一個SHIPMENT元素,ITEM元素全都包含SNNAME、和QTY元素,SHIPMENT元素包含一個帶有屬性類型的POC元素,和NAMETEL子元素。

<ORDER>

<ITEM>

<SN>132487A-J</SN>

<NAME>crank casing</NAME>

<QTY>1</QTY>

</ITEM>

<ITEM>

<SN>4238764-A</SN>

<NAME>bearing</NAME>

<QTY>15</QTY>

</ITEM>

<SHIPMENT>

<POC type="non-emergency">

<NAME>John Smith</NAME>

<TEL>555-1234</TEL>

</POC>

</SHIPMENT>

</ORDER>

 

發佈了11 篇原創文章 · 獲贊 10 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章