问题描述
|
我的应用程序应解析通过HTTP接收的XML。据我了解,有三种主要的XML解析方式:
萨克斯
DOM
XmlPullParser
据说SAX是其中最快的,而DOM并不是大型XML文档的最佳选择。但是就解析而言,什么是大型XML文档?以下是推荐的解析器?
XML文档大小介于1-5 kB之间
轻松遍历文档,即,我不仅需要了解当前元素,还需要了解父元素。
解决方法
据我了解,有三种主要的XML解析方式:
-SAX
-DOM
-XmlPullParser
错误!这些都不是最好的方法。您真正想要的是使用Simple XML Framework基于注释的解析。要了解为什么遵循此逻辑:
Java使用对象。
可以使用Java对象表示XML。 (请参阅JAXB)
注释可以用于将XML映射到Java对象,反之亦然。
简单XML框架使用注释来允许您将Java和XML一起映射。
简单XML能够在Android上运行(与JAXB不同)。
您应该将简单XML用于Android上的所有XML需求。
为了帮助您做到这一点,我将指向您自己的博客文章,该文章确切说明了如何在Android上使用Simple库。
除非您有一个100MB的XML文件,否则“简单”将对您足够快。对我来说,我在所有的Android XML项目中都使用了它。
N.B.我应该指出,如果您要求用户在Android上下载大于1MB的XML文件,那么您可能需要重新考虑您的策略。您可能做错了。
, 恐怕是这种情况,这取决于...
根据经验,根据底层实现,使用Java从XML文档中构建DOM树将消耗该文档本机大小的4到10倍(假设使用西方文本和UTF-8编码)。因此,如果速度和内存使用不是关键,那么对于您提到的小文档来说就不是问题。
DOM通常被认为是使用XML的一种非常不愉快的方式。对于背景知识,您可能需要看一下Elliotte Rusty Harold的演示文稿:XML API有什么问题(以及如何修复它们)。
但是,使用SAX可能会更加乏味,因为一次只能处理一个文档。但是,SAX速度很快,占用的内存很少。如果您可以找到自己喜欢的提取解析器,则一定要尝试一下。
另一种方法(不是超级高效,但是干净且可维护)是构建XML的内存树(例如,使用DOM),然后使用XPath表达式选择您感兴趣的信息。