2011-05-29 148 views
2

我的應用程序應解析通過HTTP接收的XML。據我瞭解有解析XML的三種主要方法:解析XML的最佳實踐

  • SAX
  • DOM
  • XmlPullParser

據說,SAX是最快的這些而DOM是不是最佳適用於較大的XML文檔。但是在解析方面什麼是大型XML文檔?對於以下內容,推薦的解析器是什麼?

  • XML文檔大小1-5 KB之間
  • 容易通過遍歷文件,即我需要知道不僅是當前元素也是父元素。
+0

還有第四個最好的三種:vtd-xml – 2016-03-08 00:09:17

回答

7

據我瞭解有解析XML的三種主要方法:
- SAX
- DOM
- XmlPullParser

錯!這兩者都不是最好的方法。你真正想要的是使用Simple XML Framework的基於註解的解析。要明白爲什麼遵循這個邏輯:

  1. Java與對象一起工作。
  2. XML可以用Java對象來表示。 (see JAXB
  3. 註釋可用於將該XML映射到您的Java對象,反之亦然。
  4. Simple XML Framework使用Annotations來允許將Java和XML映射在一起。
  5. 簡單的XML能夠在Android上運行(與JAXB不同)。
  6. 您應該使用Simple XML滿足Android上的所有XML需求。

並且爲了幫助您做到這一點,我將point you to my own blog post解釋瞭如何在Android上使用簡單庫。

除非你有一個100MB的XML文件,那麼Simple對於你來說已經足夠快了。對我來說,我將其用於所有Android XML項目。

N.B.我應該指出,如果您需要用戶下載Android上超過1MB的XML文件,那麼您可能需要重新考慮您的策略。你可能做錯了。

+2

我喜歡將XML數據映射到Java對象的想法,並會試一試。我發現了另一個API,雖然被稱爲VTD-XML,這似乎值得一看。 – 2011-05-31 06:37:52

+0

@Robert Massaioli - 我有一個簡單的XML問題,這個問題是http://stackoverflow.com/questions/12947320/java-simple-xml-serializationsimple-xml-2-6-6-jar-gives-error-用的XML文件。你能爲此提出一些建議嗎? – hemu 2012-11-06 08:54:31

4

這恐怕是使用Java構建從XML文檔DOM樹4和10之間會消耗的情況下,這取決於 ...

作爲一個經驗法則,乘以文檔的原始大小(假定爲西文本和UTF-8編碼),具體取決於底層實現。因此,如果速度和內存使用不重要,那麼對於您提到的小文檔而言,這不會成爲問題。

DOM通常被認爲是使用XML的一種令人不快的方式。對於背景你可能想看看Elliotte Rusty Harold的介紹:What's Wrong with XML APIs (and how to fix them)

但是,使用SAX可能會更加繁瑣,因爲文檔一次只能處理一個項目。然而SAX速度很快,消耗的內存很少。如果你可以找到你喜歡的pull解析器,那麼儘量嘗試一下。

另一種方法(不超高效,但乾淨,維護)是建立你的XML的內存樹(使用DOM,說的),然後使用XPath表達式來選擇你感興趣的信息。