将XML文件解组为Android中的Java对象?

时间:2009-08-29 11:34:11

标签: java xml android xsd

我正在使用互联网上的API,它将对象编组到XML文件中。鉴于XSD文件也可用,我希望能够在我下载文件后将它们解组回Java对象。

环顾四周之后,看起来JAXB是用Java完成此操作的默认库,但在我开发移动应用程序时,额外的8.6MB依赖性是不可接受的。我还发现XStream,但它的重量仍为7.9MB。

围绕Android SDK,看起来唯一可用的真正XML解析器是SAX

所以这就是问题:

  1. 有没有办法让SAX做我想做的事?
  2. 我错过了Android SDK中的其他工具吗?
  3. 是否有另一个库(显着更小)会这样做?
  4. 感谢。

6 个答案:

答案 0 :(得分:19)

有一个框架可以在Android上运行,它使用与JAXB类似的方式使用注释进行Java到XML绑定,它被称为Simple,重量不到270K,这只是XStream或JAXB所需的一小部分。 。此外,它没有外部依赖,只有一个JAR,一切都应该工作。下面是Simple的简单链接和Java的XML序列化框架。

http://simple.sourceforge.net

这也可以处理对象图中的循环。

答案 1 :(得分:5)

XStream是431k。您不需要Android应用程序中的整个分发zip。如果你添加xpp3 pull解析器以获得更快的性能,那么它将增加24k。这将使你的整个包裹达到455k。仍然不理想,但我可以忍受。

答案 2 :(得分:2)

有很多工具可以在Java和XML之间转换对象,但是我熟悉的那些工具都不比你找到的那些小。但是,根据对象图的复杂程度,SAX可能就是您所需要的,而且开销很小。诀窍是在SAX事件处理程序中自己构建对象图。在XML编组器广泛可用之前,我已经在几个项目中使用了这种技术,虽然它需要更多的工作,但它是有效的。

答案 3 :(得分:1)

kxml2-2.2.2是一个很好的小lib(43K),可以在JavaME上工作,拉解析,我已成功使用它。它唯一的依赖是xmlpull,即8k。小的怎么样?

警告说它不会做任何绑定魔法。

答案 4 :(得分:0)

在Android SDK中,除了SAX之外,DOM解析器和XMLPullParser也可用。

如果您不想完全自己构建内存数据结构,DOM可能会减轻您的痛苦 - 只要速度和内存占用是您愿意支付的价格。

答案 5 :(得分:0)

我们有一个名为XBinder的产品,可以从XSD生成类和编码/解码代码。版本2.1大约需要187K。版本2.2(将于2010年10月发布)大约需要101K(并且在Android上比v2.1更容易使用)。请查看here