1. 程式人生 > >xml檔案解析的幾種方式(一)

xml檔案解析的幾種方式(一)

常見的幾種解析xml檔案的方式

XML的解析方式有很多,光開源的就有十多種:如XercesJDOMDOM4JXOMJiBXKXMLXMLBeansjConfigXStreamXJR

但是最常用的還是sax,dom,pull,dom4j

而android中用的比較多的是 sax(Simple APIs for XML)、dom(Document Object Model)、pull,其中pull在這三個中又最為適用。(大部分用於java的解析器在android上都可以用,對於有人說dom4j最好,這個沒試驗過,暫時不好說,但是大部分人都說pull好)

SAX解析

全稱:simple  apis for xml ,sax提供的訪問模式是一種順序模式,使用sax解析xml檔案時候,會觸發一系列事件,呼叫對應的函式,訪問xml,sax介面

也稱為事件驅動介面  

優點: 採用事件驅動模式,對記憶體耗費較小,適用只處理xml檔案中的資料

缺點:很難同時訪問xml檔案中的多處不同資料

DOM解析

dom是一種文件物件模型;

優點:dom可以以一種獨立於平臺和語言的方式訪問和修改一個文件的內容和結構,dom技術使得使用者頁面可以動態的變化,如動態顯示隱藏一個元素,改變它的屬性,增加一個元素等,dom可以使頁面的互動性大大增強。

缺點:dom解析xml檔案會將xml檔案的所有內容放在記憶體中

PULL解析

pull和sax很相似,區別在於:pull讀取xml檔案後觸發相應的事件呼叫方法返回的是數字,且pull可以在程式中控制,想解析到哪裡就可以停止解析。 (SAX解析器的工作方式是自動將事件推入事件處理器進行處理,因此你不能控制事件的處理主動結束;而Pull解析器的工作方式為允許你的應用程式程式碼主動從解析器中獲取事件,正因為是主動獲取事件,因此可以在滿足了需要的條件後不再獲取事件,結束解析。pull是一個while迴圈,隨時可以跳出,而sax不是,sax是隻要解析了,就必須解析完成。)

選擇sax解析還是dom解析

dom解析要求將整個文件全部載入玩,才能執行操作,而且必須存放到記憶體中,這樣可能會記憶體溢位,之後可以修改文件的結構

而sax解析,不用一次性將檔案全部載入完,在找到指定的tag可以停止解析,在處理大型文件時候較好用,而且對記憶體要求不高

其他的解析方式:

1)DOM4J效能最好,連Sun的JAXM也在用DOM4J.目前許多開源專案中大量採用DOM4J,例如大名鼎鼎的Hibernate也用DOM4J來讀取XML配置檔案。如果不考慮可移植性,那就採用DOM4J.     

2)JDOM和DOM在效能測試時表現不佳,在測試10M文件時記憶體溢位。在小文件情況下還值得考慮使用DOM和JDOM.雖然JDOM的開發者已經說明他們期望在正式發行版前專注效能問題,但是從效能觀點來看,它確實沒有值得推薦之處。另外,DOM仍是一個非常好的選擇。DOM實現廣泛應用於多種程式語言。它還是許多其它與XML相關的標準的基礎,因為它正式獲得W3C推薦(與基於非標準的Java模型相對),所以在某些型別的專案中可能也需要它(如在JavaScript中使用DOM)。    

3)SAX表現較好,這要依賴於它特定的解析方式-事件驅動。一個SAX檢測即將到來的XML流,但並沒有載入到記憶體(當然當XML流被讀入時,會有部分文件暫時隱藏在記憶體中)。