2011-05-29 50 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表达式来选择你感兴趣的信息。