XML編程執行個體(一)

來源:互聯網
上載者:User

 

 XML編程執行個體(一) 

前段時間,由於工作的需要,利用到了XML,所以對其進行了一些簡單的研究。在此願把一些心得寫出來,與各位分享,不對的地方還望多多包涵。 

1.什麼是 XML?
           首先,我想各位應該都已經大概知道什麼是XML了。如果,你對什麼是XML還沒有一個概念的話,你可以看一些相關的材料,我就不多說了。 

2.為什麼要用XML?
            其實,剛開始我也不是很明白,後來在工作中才慢慢意識到。首先,我寫的程式需要傳送很多的資料結構,比如表格,分類樹等等。要在以往,我想自己會去定義一個資料結構。這是相當麻煩的一件事情,而且當這個結構需要不斷更新,有很大的靈活性時,那就更讓人頭疼了,更別說通用性和跨平台了。這時候,XML對樹形結構資料的強大表達能力就顯示出來了。比如一個表格式資料。


<TABLE>

<TR>

                    <TD> 11</TD>

                    <TD>12</TD>

</TR>

<TR>

                    <TD> 21</TD>

                    <TD>22</TD>

</TR>

</TABLE>


11

12

21

22

 


 

 

 

 

 


           

 

 

 

以上的描述,很簡單明了,通用性和跨平台是很顯見的。當然,代價也是有的,那就是用於表達資訊的資料變大了。這就要求你在效能和可擴充性之間進行權衡了。 

再次,XML 現在已經開始流行起來了,其前身(說類似更合適)HTML就是一個明證,更不用說微軟的.NET計劃就是架構在XML上面的。 

最後,因為XML的流行,已經有了越來越多的開發工具(SDK),比如XML Parser就有很多種。利用這些工具,我們就可以更快的進行開發,從而減少不必要的麻煩----比如自己定義一套規範,還要開發相關的操作工具等等,麻煩,而且不易與外界進行交流。 

3.使用什麼開發工具
            這裡,我們面向的是程式員,猶指VC++的程式員。我們的選擇很多,不過選擇Microsoft 的XML Parser SDK應該是不錯的,至少文檔很詳盡(在這一點上,微軟做得一直不錯)。當然還有很多別的選擇,比如Apache.org上的eXcel。更詳細的資訊,請看www.ibm.com/xml。

 

基本概念

 XML的編程模式
            前面我們說過,XML對樹的表達能力是很強大的,我們完全可以把一個XML文檔用一個樹來表達,對於文檔的操作就是對樹的操作,這就是DOM(文件物件模型)。然而,DOM對XML文檔的處理有許多的毛病,比如速度慢等,於是有了另一種模型SAX.
            下面,我們分別詳細的對這兩種模型進行說明。 

DOM模型
            DOM模型需要對整個XML文檔進行掃描,然後解析產生一個對象樹,XML文檔中的所有標籤和屬性都是用對象來表示,而不是一個孤立的文本。因為是對象,所以有一個上下文,有一個內含項目關聯性。

基本是這樣的
Doc
   Element
       Note 
            Text

Doc是指整個樹對象,包括了基本的屬性。
Element是指的一個標籤,可以包含屬性(Attribute)和子節點(ChilNode)的節點對象。
Note也是一個標籤,不過不能包含子節點和屬性。
Text就是簡單的文本。

            既然是樹操作,就要包含節點的添、刪和瀏覽等基本的功能。利用這些功能,就可以完全對XML文檔進行操作了。對象級的操作,比起直接對文本操作要容易得多,也要直觀得多。 

SAX模型
            我們說了,DOM模型的缺點就是速度慢,和浪費記憶體。因為在許多的情況下,我們並不需要對整個的XML文檔進行掃描。而僅僅需要其中的某些資訊,這時候就沒有必有產生一個龐大的樹結構了,特別是當檔案很大的時候。
            SAX模型,就是對XML文檔邊掃描,邊處理。類似於許多的程式設計思想,SAX是事件驅動的。這個意思是說,它可以在處理的過程中產生不同的訊息,並調用相應的函數進行處理。並可以在中途退出,這一點非常重要。比如網頁在下載的過程中,就可以一邊下載,一邊把已下部分進行解析顯示。 

根據不同的情況,我們採用不同的方法進行處理。 

應該說明的是,XML的這些模型都是標準化組織定義的,而不是某個公司的規範。所以,程式的移植應該比較的方便。

XML編程舉例 

由於Microft  XML Parser的文檔比較的全面,而且和Visual C++的結合比較緊密,我們這裡就以這樣的組合來進行舉例,對於別的語言,可以舉一反三。 

對Microsoft XML Parser的一點說明:

所有的對象都是COM對象。為此,我們使用SmartPointer來減少AddRef,ReleaseRef的麻煩。同樣,因為使用的字串統一是BSTR類型的,記憶體的釋放也是一個比較麻煩的事情,所以用_bstr_t  類來對BSTR資料類型進行封裝,可以減少不必要的麻煩。

..…待續 ……

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.