本文目錄一覽:
- 1、java解析xml的幾種方式哪種最好?
- 2、目前在Java中幾種常用的XML解析器的比較
- 3、求封裝好的java解析xml的類
- 4、java的xml的解析方式有什麼,他們的解析流程是怎麼樣的,有什麼區別
java解析xml的幾種方式哪種最好?
在java中解析xml有哪幾種方法?
1、JDOM生成和解析XML
為減少DOM、SAX的編碼量,出現了JDOM
優點:20-80原則,極大減少了代碼量。
使用場合:要實現的功能簡單,如解析、創建等,但在底層,JDOM還是使用SAX(最常用)、DOM、Xanan文檔。
2、SAX生成和解析XML文檔
為解決DOM的問題,出現了SAX,SAX
事件驅動。當解析器發現元素開始、元素結束、文本、文檔的開始或結束等時發送事件,程序員編寫響應這些事件的代碼,保存數據。
優點:不用事先調入整個文檔,佔用資源少。SAX解析器代碼比DOM解析器代碼小,適於Applet下載。
缺點:不是持久的,事件過後若沒保存數據,那麼數據就丟了。無狀態性,從事件中只能得到文本,但不知該文本屬於哪個元素。
使用場合:Applet。只需XML文檔的少量內容,很少回頭訪問,機器內存少。
3、DOM生成和解析XML文檔
為XML文檔的已解析版本定義了一組接口。解析器讀入整個文檔,然後構建一個駐留內存的樹結構,然後代碼就可以使用 DOM 接口來操作這個樹結構。
優點:整個文檔樹在內存中,便於操作,支持刪除、修改、重新排列等多種功能。
缺點:將整個文檔調入內存(包括無用的節點),浪費時間和空間。
使用場合:一旦解析了文檔還需多次訪問這些數據,硬件資源充足(內存、CPU)。
目前在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就可以的原因了.
求封裝好的java解析xml的類
解析xml我給你推薦一個xstream,使用非常簡單,只需要根據xml的結構定義好相應用類,使用就是如此的簡單,以下只是我軟件中的一個解析方法,給你參考一下
/**
* 解析所有分類名稱
* @param xml
* @return
*/
public static Catlogs parseCatalogs(String xml) {
Catlogs catlogs = null;
if (xml != “”) {
XStream xs = new XStream();
xs.processAnnotations(Catlogs.class);
catlogs = (Catlogs) xs.fromXML(xml);
}
return catlogs;
}
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。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/190084.html