在 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

在 Golang 中将字符串解组为类似结构的结构

Java/JAXB:根据属性将 Xml 解组为特定子类

使用 Jaxb API 将 XML 解组为 Java 对象时获取 NullPointerException

如何使用 jaxb 将 xml 字符串解组为 java 对象