目前在Java中幾種常用的XML解析器的比較

目前常用的XML的解析器主要有:SAX,DOM,Xerces

1、SAX處理的優點非常類似於流媒體的優點。分析能夠立即開始,而不是等待所有的數據被處理。而且,由於應用程序只是在讀取數據時檢查數據,因此不需要將數據存儲在內存中。這對於大型文檔來說是個巨大的優點。事實上,應用程序甚至不必解析整個文檔;它可以在某個條件得到滿足時停止解析。一般來說,SAX 還比它的替代者 DOM 快許多。另一方面,由於應用程序沒有以任何方式存儲數據,使用 SAX 來更改數據或在數據流中往後移是不可能的。

2、DOM 以及廣義的基於樹的處理具有幾個優點。首先,由於樹在內存中是持久的,因此可以修改它以便應用程序能對數據和結構作出更改。它還可以在任何時候在樹中上下導航,而不是像 SAX 那樣是一次性的處理。DOM 使用起來也要簡單得多。另一方面,在內存中構造這樣的樹涉及大量的開銷。大型文件完全佔用系統內存容量的情況並不鮮見。此外,創建一棵 DOM 樹可能是一個緩慢的過程。

3、選擇 DOM 還是選擇 SAX,這取決於下面幾個因素:
      應用程序的目的:如果打算對數據作出更改並將它輸出爲 XML,那麼在大多數情況下,DOM 是適當的選擇。並不是說使用 SAX 就不能更改數據,但是該過程要複雜得多,因爲您必須對數據的一份拷貝而不是對數據本身作出更改。
      數據容量: 對於大型文件,SAX 是更好的選擇。數據將如何使用:如果只有數據中的少量部分會被使用,那麼使用 SAX 來將該部分數據提取到應用程序中可能更好。 另一方面,如果您知道自己以後會回頭引用已處理過的大量信息,那麼 SAX 也許不是恰當的選擇。
      對速度的需要:SAX 實現通常要比 DOM 實現更快。
      SAX 和 DOM 不是相互排斥的,記住這點很重要。您可以使用 DOM 來創建 SAX 事件流,也可以使用 SAX 來創建 DOM 樹。事實上,用於創建 DOM 樹的大多數解析器實際上都使用 SAX 來完成這個任務!

4、SAX,DOM是兩種對XML文檔進行分析的方法(沒有具體的實現,只有接口),所以不是解釋器,如果光有他們,你是完成不了對xml文檔的處理的。SAX的包是org.xml.sax,DOM的包是org.w3c.dom,包的名稱很重要,它有助於你理解他們之間的關係。

5、jaxp是api,他封裝了sax/dom兩種接口。並在sax/dom的基礎之上,作了一套比較簡單的api以供開發人員使用。jaxp的包是javax.xml.parsers,可以看看jaxp的源文件,它的文件中包含了對sax或者dom的引用(import)jaxp也不是具體的實現,他只是一套api。如果你僅僅有jaxp那是無法工作的,(其實jaxp只是完成對sax、dom的包裝,生成了DocumentBuilderFactory/DocumentBuilder和SAXParserFactory SAXParser。也就是設計模式中的工廠模式,他的好處就是具體的對象( 解釋器)建立由子類完成)

6、xerces解釋器(號稱地球上最快的xml解釋器)在xerces中對jaxp中定義的SAXParser SAXParserFactory DocumentBuilder DocumentBuilderFactory進行了繼承(extends)對應SAXParserImpl XParserFactoryImpl DocumentBuilderImpl DocumentBuilderFactoryImpl這就是爲什麼你的classpath中只要有xerces.jar(其中包含了sax dom jaxp )和 xercesImpl.jar就可以的原因了.

from http://blog.csdn.net/baijsp/archive/2004/09/05/94909.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章