【问题标题】:Unmarshalling XML files into Java objects in Android?在 Android 中将 XML 文件解组为 Java 对象?
【发布时间】:2010-11-23 23:40:20
【问题描述】:

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

环顾四周,JAXB 似乎是在 Java 中执行此操作的默认库,但当我正在开发移动应用程序时,额外的 8.6MB 依赖项是不可接受的。我还找到了XStream,但它的大小仍然为 7.9MB。

在 Android SDK 上一探究竟,似乎唯一可用的真正 XML 解析器是 SAX。

那么问题来了:

  1. 有没有办法让 SAX 做我想做的事?
  2. 我错过了 Android SDK 中的另一个工具吗?
  3. 是否有另一个库(明显更小)可以做到这一点?

谢谢。

【问题讨论】:

    标签: java xml android xsd


    【解决方案1】:

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

    http://simple.sourceforge.net

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

    【讨论】:

    【解决方案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。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-11-01
            • 1970-01-01
            • 2011-11-08
            • 1970-01-01
            • 1970-01-01
            • 2016-12-02
            相关资源
            最近更新 更多