【问题标题】:Best practices for parsing XML解析 XML 的最佳实践
【发布时间】:2011-05-29 09:14:11
【问题描述】:

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

  • 萨克斯
  • DOM
  • XmlPullParser

据说 SAX 是其中最快的,而 DOM 对于较大的 XML 文档并不是最佳选择。但就解析而言,什么是大型 XML 文档?以下推荐的解析器是什么?

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

【问题讨论】:

    标签: android xml parsing


    【解决方案1】:

    据我了解,解析 XML 的主要方式有以下三种:
    - 萨克斯
    - DOM
    - XmlPullParser

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

    1. Java 使用对象。
    2. XML 可以使用 Java 对象来表示。 (see JAXB)
    3. 注释可用于将该 XML 映射到您的 Java 对象,反之亦然。
    4. 简单 XML 框架使用注释允许您将 Java 和 XML 映射在一起。
    5. 简单的 XML 能够在 Android 上运行(与 JAXB 不同)。
    6. 您应该使用 Simple XML 来满足您在 Android 上的所有 XML 需求。

    为了帮助您做到这一点,我将 point you to my own blog post 准确解释如何在 Android 上使用 Simple 库。

    除非您有一个 100MB 的 XML 文件,否则 Simple 对您来说已经足够快了。它适合我,我在所有 Android XML 项目中都使用它。

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

    【讨论】:

    • 我喜欢将 XML 数据映射到 Java 对象的想法,并将尝试一下。我发现了另一个 API,虽然称为 VTD-XML,但似乎值得一看。
    • @Robert Massaioli - 我对简单的 xml 有疑问,问题是 stackoverflow.com/questions/12947320/…。您能对此提出一些建议吗?
    【解决方案2】:

    恐怕这是一种情况,这取决于 ...

    根据经验,使用 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 表达式来选择您感兴趣的信息。

    【讨论】:

      猜你喜欢
      • 2010-09-06
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多