?? 0801-0200.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0071)http://162.105.170.55/ASPs/GetLearningArticleTemp.asp?section=0801-0200 -->
<HTML><HEAD><TITLE>XML中國論壇 - 初學進階 - 8.1.2 DOM與SAX并存</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>TABLE {
FONT-SIZE: 9pt; COLOR: black; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"
}
.pt9 {
FONT-SIZE: 9pt; COLOR: black; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"
}
.pt10 {
FONT-WEIGHT: 700; FONT-SIZE: 10pt; LINE-HEIGHT: 18pt; FONT-FAMILY: "宋體"
}
.TempOutline {
FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; COLOR: #666666; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.TempOutline1 {
FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; COLOR: #666666; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.Outline {
FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.Outline1 {
FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.Outline11 {
FONT-SIZE: 9pt; MARGIN-LEFT: 38pt; TEXT-INDENT: -50pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.passage0 {
FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.passage1 {
FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.passage11 {
FONT-SIZE: 9pt; MARGIN-LEFT: 38pt; TEXT-INDENT: -50pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.passage111 {
FONT-SIZE: 9pt; MARGIN-LEFT: 51pt; TEXT-INDENT: -64pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
</STYLE>
<META content="Microsoft FrontPage 5.0" name=GENERATOR></HEAD>
<BODY vLink=#000000 aLink=#000000 link=#000000 leftMargin=0 topMargin=0
onload=""><!-- 以下為主體內容 -->
<div align="center">
<center>
<TABLE width="100%" border=0 style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">
<TBODY>
<TR vAlign=top>
<TD width=43 rowSpan=2></TD>
<TD vAlign=center width="502" >
<p align="center"><IMG height=33
src="image/title_learner.gif" width=226></TD>
<TD width=41 rowSpan=2></TD>
</TR>
<TR vAlign=top>
<TD width="502" ><!-- 正文內容 -->
<DIV class=pt10><B>8.1.2 DOM與SAX并存</B></DIV>
<DIV></DIV><BR>
<DIV class=pt9>
<P>如前所述,之所以要制定一個接口標準,是為了給XML應用程序的開發帶來方便,使得應用程序可以根據需要隨時選擇、更換合適的分析器,同時又無須對程序本身再做大的改動。那么讀者可能會問,既然接口需要統一,為什么現在還有兩個接口標準共存呢?這兩個標準之間又存在什么關系呢?</P>
<P>事實上,DOM和SAX兩個接口標準之所以能夠并存,就是因為它們所要實現的目標不同。DOM和SAX分析器在接口實現過程中分別側重于不同的方面,二者各有長短,分別滿足了不同的應用需求。在進行橫向比較之前,我們先來分別簡要介紹一下這兩個標準。</P>
<P><STRONG>DOM</STRONG></P>
<P>DOM的全稱是Document Object
Model,也即文檔對象模型。在應用程序中,基于DOM的XML分析器將一個XML文檔轉換成一個對象模型的集合(通常稱DOM樹),應用程序正是通過對這個對象模型的操作,來實現對XML文檔數據的操作。通過DOM接口,應用程序可以在任何時候訪問XML文檔中的任何一部分數據,因此,這種利用DOM接口的機制也被稱作隨機訪問機制。</P>
<P>DOM接口提供了一種通過分層對象模型來訪問XML文檔信息的方式,這些分層對象模型依據XML的文檔結構形成了一棵節點樹。無論XML文檔中所描述的是什么類型的信息,即便是制表數據、項目列表或一個文檔,利用DOM所生成的模型都是節點樹的形式。也就是說,DOM強制使用樹模型來訪問XML文檔中的信息。由于XML本質上就是一種分層結構,所以這種描述方法是相當有效的。</P>
<P><STRONG>SAX</STRONG></P>
<P>SAX的全稱是Simple APIs for
XML,也即XML簡單應用程序接口。與DOM不同,SAX提供的訪問模式是一種順序模式,這是一種快速讀寫XML數據的方式。當使用SAX分析器對XML文檔進行分析時,會觸發一系列事件,并激活相應的事件處理函數,應用程序通過這些事件處理函數實現對XML文檔的訪問,因而SAX接口也被稱作事件驅動接口。</P>
<P> </P>
<P>DOM樹所提供的隨機訪問方式給應用程序的開發帶來了很大的靈活性,它可以任意地控制整個XML文檔中的內容。然而,由于DOM分析器把整個XML文檔轉化成DOM樹放在了內存中,因此,當文檔比較大或者結構比較復雜時,對內存的需求就比較高。而且,對于結構復雜的樹的遍歷也是一項耗時的操作。所以,DOM分析器對機器性能的要求比較高,實現效率不十分理想。不過,由于DOM分析器所采用的樹結構的思想與XML文檔的結構相吻合,同時鑒于隨機訪問所帶來的方便,因此,DOM分析器還是有很廣泛的使用價值的。</P>
<P>SAX分析器在對XML文檔進行分析時,觸發了一系列的事件,由于事件觸發本身是有時序性的,因此,SAX提供的是一種順序訪問機制,對于已經分析過的部分,不能再倒回去重新處理。SAX之所以被叫做"簡單"應用程序接口,是因為SAX分析器只做了一些簡單的工作,大部分工作還要由應用程序自己去做。也就是說,SAX分析器在實現時,它只是順序地檢查XML文檔中的字節流,判斷當前字節是XML語法中的哪一部分、是否符合XML語法,然后再觸發相應的事件,而事件處理函數本身則要由應用程序自己來實現。同DOM分析器相比,SAX分析器缺乏靈活性。然而,由于SAX分析器實現簡單,對內存要求比較低,因此實現效率比較高,對于那些只需要訪問XML文檔中的數據而不對文檔進行更改的應用程序來說,SAX分析器更為合適。</P>
<P>綜上所述,無論是DOM接口還是SAX接口,都各自有其優缺點。也正是如此,它們將長期并存下去,在不同的應用中發揮不同的作用。<BR></P></DIV>
<P></P>
<P></P></TD></TR></TBODY></TABLE>
</center>
</div>
<P></P>
<P>
<P></P></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -