解析XML的最佳实践

时间:2011-05-29 09:14:11

标签: android xml parsing

我的应用程序将解析通过HTTP接收的XML。据我所知,解析XML有三种主要方式:

  • SAX
  • DOM
  • XmlPullParser

据说SAX是最快的,而DOM不适合大型XML文档。但就解析而言,什么是大型XML文档?对于以下内容,推荐的解析器是什么?

  • XML文档大小介于1-5 kB之间
  • 轻松遍历文档,即我不仅需要知道当前元素,还需要知道父元素。

2 个答案:

答案 0 :(得分:7)

  

据我所知,解析XML有三种主要方式:
    - SAX
    - DOM
    - XmlPullParser

错误!这些都不是最好的方式。你真正想要的是使用Simple XML Framework进行基于注释的解析。要了解为什么遵循这个逻辑:

  1. Java使用对象。
  2. 可以使用Java对象表示XML。 (see JAXB
  3. 可以使用注释将该XM​​L映射到Java对象,反之亦然。
  4. Simple XML Framework使用Annotations允许您将Java和XML映射到一起。
  5. Simple XML能够在Android上运行(与JAXB不同)。
  6. 您应该使用Simple XML来满足Android上的所有XML需求。
  7. 为了帮助您完成这项工作,我将point you to my own blog post解释如何在Android上使用简单库。

    除非你有一个100MB的XML文件,否则Simple将足够快。对我来说,我在所有Android XML项目中使用它。

    N.B。我应该指出,如果您要求用户在Android上下载超过1MB的XML文件,那么您可能需要重新考虑您的策略。你可能做错了。

答案 1 :(得分: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速度快,占用的内存非常少。如果你能找到你喜欢的拉解析器那么一定要试试。

另一种方法(不是超级高效,但干净且可维护)是构建XML的内存树(比方说使用DOM),然后使用XPath表达式选择您感兴趣的信息。