【问题标题】:Alternate XML parser implementations for AndroidAndroid 的替代 XML 解析器实现
【发布时间】:2010-10-12 06:43:01
【问题描述】:

除了内置的 kXML 拉解析器之外,我还在寻找适用于 Android 的 XML 解析解决方案。我正在尝试解析从服务器下载的大型 (4MB+) XML 文件,并且 kXML 解析器在解析时尝试分配 1MB+ 字节数组后抛出 OutOfMemory 错误。一个好的流式 XML 解析器不应该分配这么大的数组!!

Android 中使用的 kXML v2 解析器似乎已经有 7 年的历史了。我想尝试其他方法,看看它是否能解决我的问题,最好是实现相同 org.xmlpull.v1 接口的方法,因为我的代码已经针对它编写了。 Woodstox 看起来是个不错的选择,它有一个 XMLPullParser 适配器,但显然 Android 工程师很难包含 javax.xml.streaming 库。我看到了一些相当复杂的“jar-jar”解决方法,但如果有更简单的方法,我宁愿不花很多时间在 Ant 上乱搞。有没有其他人已经让另一个 XML 拉解析器工作并且可以指出它?

【问题讨论】:

    标签: java android xml parsing


    【解决方案1】:

    在最坏的情况下,您可能会恢复到 SAX,这是内存效率最高的方法。虽然我猜你的代码发生了很大的变化。

    【讨论】:

      【解决方案2】:

      到目前为止,我发现的最佳解决方案是包含 XmlPullParser 的旧 Javolution 库。 Javolution 拉解析器实际上并没有实现 org.xmlpull.v1.XmlPullParser,但它具有完全相同的方法签名,只是它的方法返回 CharSequence 而不是 String。这很容易通过将其包裹到自制适配器中来解决。

      不幸的是,Javolution 拉式解析器似乎已被弃用,并且无法在最新版本的 JAR 中找到,但我在这里找到了一个旧的 JAR 文件:http://download.osgeo.org/webdav/geotools/org/javolution/javolution/3.7.1/

      事实证明我的问题是我的 XML 文件在它的末尾碰巧包含超过 1MB 的 0x00 字符,这些字符首先不是合法字符!但是,如果有人想尝试其他解析器,我希望这对您有所帮助。

      【讨论】:

        【解决方案3】:

        我计划将源代码用于StAX 实现,您可以下载here。我刚刚发布了一个关于它的问题here。还有其他实现。喜欢Woodstox

        【讨论】:

          【解决方案4】:

          我使用 libgdx 库,它的 XmlReader 类实现得非常好! 只需复制它并删除此方法parse(FileHandle file)

          代码链接: https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/utils/XmlReader.java

          也使用 ObjectMap 导入。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-05-21
            • 2012-01-12
            • 2013-06-26
            • 2010-11-11
            相关资源
            最近更新 更多