javasax
Ⅰ 目前在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和SAXParserFactorySAXParser。也就是設計模式中的工廠模式,他的好處就是具體的對象(解釋器)建立由子類完成)
6、xerces解釋器(號稱地球上最快的xml解釋器)在xerces中對jaxp中定義的進行了繼承(extends)對應ryImpl這就是為什麼你的classpath中只要有xerces.jar(其中包含了saxdomjaxp)和xercesImpl.jar就可以的原因了.
Ⅱ java解析xml的幾種方式哪種最好
(1)DOM解析
DOM是html和xml的應用程序介面(API),以層次結構(類似於樹型)來組織節點和信息片段,映射XML文檔的結構,允許獲取;
(2)SAX(Simple API for XML)解析
流模型中的"推"模型分析方式。通過事件驅動,每發現一個節點就引發一個事件,事件推給事件處理器,通過回調方法;
Ⅲ java的xml的解析方式有什麼,他們的解析流程是怎麼樣的,有什麼區別
答:4種。(或者說是兩種,因為JDOM和DOM4J是DOM的兩個特殊情況)
1.SAX解析
解析方式是事件驅動機制!
SAX解析器,逐行讀取XML文件解析,每當解析到一個標簽的開始/結束/內容/屬性時,觸發事件。
可以在這些事件發生時,編寫程序進行相應的處理。
優點:
分析能夠立即開始,而不是等待所有的數據被處理。
逐行載入,節省內存,有助於解析大於系統內存的文檔。
有時不必解析整個文檔,它可以在某個條件得到滿足時停止解析。
缺點:
1.單向解析,無法定位文檔層次,無法同時訪問同一個文檔的不同部分數據(因為逐行解析,當解析第n行時,第n-1行)已經被釋放了,無法再對其進行操作)。
2. 無法得知事件發生時元素的層次, 只能自己維護節點的父/子關系。
3. 只讀解析方式, 無法修改XML文檔的內容。
2. DOM解析
是用與平台和語言無關的方式表示XML文檔的官方W3C標准,分析該結構通常需要載入整個 文檔和內存中建立文檔樹模型。程序員可以通過操作文檔樹, 來完成數據的獲取 修改 刪除等。
優點:
文檔在內存中載入, 允許對數據和結構做出更改。訪問是雙向的,可以在任何時候在樹中雙向解析數據。
缺點:
文檔全部載入在內存中 , 消耗資源大。
3. JDOM解析
目的是成為Java特定文檔模型,它簡化與XML的交互並且比使用DOM實現更快。由於是第一 個Java特定模型,JDOM一直得到大力推廣和促進。
JDOM文檔聲明其目的是「使用20%(或更少)的精力解決80%(或更多)Java/XML問題」 (根據學習曲線假定為20%)
優點:
使用具體類而不是介面,簡化了DOM的API。
大量使用了Java集合類,方便了Java開發人員。
缺點:
沒有較好的靈活性。
性能不是那麼優異。
4. DOM4J解析
它是JDOM的一種智能分支。它合並了許多超出基本XML文檔表示的功能,包括集成的XPath 支持、XML Schema支持以及用於大文檔或流化文檔的基於事件的處理。它還提供了構建文檔表示的選項, DOM4J是一個非常優秀的Java XML API,具有性能優異、功能強大和極端易用使用的特點,同時它也是一 個開放源代碼的軟體。如今你可以看到越來越多的Java軟體都在使用DOM4J來讀寫XML。
目前許多開源項目中大量採用DOM4J , 例如:Hibernate。