在 Android 中将 XML 文件解组为 Java 对象?
Posted
技术标签:
【中文标题】在 Android 中将 XML 文件解组为 Java 对象?【英文标题】:Unmarshalling XML files into Java objects in Android? 【发布时间】:2010-11-23 23:40:20 【问题描述】:我正在使用 Internet 上的 API,它将对象编组为 XML 文件。鉴于 XSD 文件也可用,我希望能够在下载文件后将它们解组回 Java 对象。
环顾四周,JAXB 似乎是在 Java 中执行此操作的默认库,但当我正在开发移动应用程序时,额外的 8.6MB 依赖项是不可接受的。我还找到了XStream,但它的大小仍然为 7.9MB。
在 android SDK 上一探究竟,似乎唯一可用的真正 XML 解析器是 SAX。
那么问题来了:
-
有没有办法让 SAX 做我想做的事?
我错过了 Android SDK 中的另一个工具吗?
是否有另一个库(明显更小)可以做到这一点?
谢谢。
【问题讨论】:
【参考方案1】:有一个可以在 Android 上运行的框架,它使用与 JAXB 类似的方式使用注释进行 Java 到 XML 绑定,它被称为 Simple,重量不到 270K,这只是 XStream 或 JAXB 所需内容的一小部分.此外,它没有外部依赖项,只有一个 JAR,一切都应该工作。下面是 Simple 和 Java 的 XML 序列化框架的链接。
http://simple.sourceforge.net
这也可以处理对象图中的循环。
【讨论】:
这个库看起来不错,我会用我的android应用程序测试它,但是,有一个工具可以将Java类从XSD构建成这种格式? 您可能想将此添加到此评论中:javacodegeeks.com/2011/02/… 我刚刚写了一篇关于在 Android 项目中包含 simple 的综合博文:robertmassaioli.wordpress.com/2011/04/21/…【参考方案2】:XStream 为 431k。您不需要在您的 android 应用程序中使用整个分发 zip。如果您添加 xpp3 pull 解析器以获得更快的性能,那么它将增加 24k。那将使您的整个包裹达到455k。仍然不理想,但我可以忍受。
【讨论】:
【参考方案3】:有很多工具可以在 Java 和 XML 之间转换对象,但我所熟悉的工具都比您找到的工具小。但是,根据对象图的复杂性,SAX 可能就是您所需要的,而且开销很小。诀窍是在 SAX 事件处理程序中自己构建对象图。在 XML 编组器如此广泛可用之前,我已经在几个项目中使用过这种技术,虽然它需要更多的工作,但它很有效。
【讨论】:
是的......我开始寻找替代品的主要原因是“对象图”实际上非常复杂。我会继续寻找......谢谢。【参考方案4】:kxml2-2.2.2 是一个不错的小库 (43K),它可以在 JavaME 上运行,可以进行拉解析,我已经成功使用它。它拥有的唯一依赖项是 xmlpull,即 8k。小号怎么样?
需要注意的是它不会做任何绑定魔法。
【讨论】:
【参考方案5】:在 Android SDK 中,除了 SAX,DOM 解析器和 XMLPullParser 也可用。
如果您不想完全自己构建内存数据结构,DOM 可能会减轻您的痛苦——只要速度和内存占用是您愿意付出的代价。
【讨论】:
【参考方案6】:我们有一个名为 XBinder 的产品,它可以从 XSD 生成类和编码/解码代码。 2.1 版占用大约 187K。 2.2 版(将于 2010 年 10 月发布)大约需要 101K(并且在 Android 上比 v2.1 更容易使用)。看看here。
【讨论】:
以上是关于在 Android 中将 XML 文件解组为 Java 对象?的主要内容,如果未能解决你的问题,请参考以下文章
在将 XML 文件解组为对象后,如何让 JAXB 调用方法?
如何在 Akka HTTP 中将“text/plain”解组为 JSON