【发布时间】:2011-05-29 09:14:11
【问题描述】:
我的应用程序将解析通过 HTTP 接收的 XML。据我了解,解析 XML 的主要方式有以下三种:
- 萨克斯
- DOM
- XmlPullParser
据说 SAX 是其中最快的,而 DOM 对于较大的 XML 文档并不是最佳选择。但就解析而言,什么是大型 XML 文档?以下推荐的解析器是什么?
- XML 文档大小在 1-5 kB 之间
- 轻松遍历文档,即我不仅需要知道当前元素,还需要知道父元素。
【问题讨论】:
我的应用程序将解析通过 HTTP 接收的 XML。据我了解,解析 XML 的主要方式有以下三种:
据说 SAX 是其中最快的,而 DOM 对于较大的 XML 文档并不是最佳选择。但就解析而言,什么是大型 XML 文档?以下推荐的解析器是什么?
【问题讨论】:
据我了解,解析 XML 的主要方式有以下三种:
- 萨克斯
- DOM
- XmlPullParser
错了!这些都不是最好的方法。您真正想要的是使用Simple XML Framework 进行基于注释的解析。看看为什么要遵循这个逻辑:
为了帮助您做到这一点,我将 point you to my own blog post 准确解释如何在 Android 上使用 Simple 库。
除非您有一个 100MB 的 XML 文件,否则 Simple 对您来说已经足够快了。它适合我,我在所有 Android XML 项目中都使用它。
注意我应该指出,如果您要求用户在 Android 上下载超过 1MB 的 XML 文件,那么您可能需要重新考虑您的策略。你可能做错了。
【讨论】:
恐怕这是一种情况,这取决于 ...
根据经验,使用 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 表达式来选择您感兴趣的信息。
【讨论】: