android - Android XmlResourceParser 的方便使用?

标签 android scala xml-parsing android-resources simple-framework

当我需要访问已编译的 Android XML 资源时,我似乎无法使用 openRawResource(resId),因为它给了我一个已编译的二进制文件。

我发现获取 XML 的唯一方法是使用返回 XmlResourceParser(实现 XmlPullParser)的 getXml(resId) .

如何从 Android 资源中方便地反序列化复杂的已编译 XML(但不大)?

我试图破解 Simple XML 框架:

val serializer = new Persister()
serializer.read(classOf[AFoo], 
    new NodeReader(new PullReader(r.getXml(resId))).readRoot)

(上面的 Scala 代码被简化了。)

然而它失败了:

java.lang.RuntimeException: getPrefix not supported
    at android.content.res.XmlBlock$Parser.getPrefix(XmlBlock.java:156)
    at org.simpleframework.xml.stream.PullReader$Start.<init>(PullReader.java:373)
    at org.simpleframework.xml.stream.PullReader.start(PullReader.java:143)
    at org.simpleframework.xml.stream.PullReader.read(PullReader.java:109)
    at org.simpleframework.xml.stream.PullReader.read(PullReader.java:117)
    at org.simpleframework.xml.stream.PullReader.next(PullReader.java:89)
    at org.simpleframework.xml.stream.NodeReader.readElement(NodeReader.java:111)
    at org.simpleframework.xml.stream.NodeReader.readRoot(NodeReader.java:85)
  • 有没有不调用 getPrefix 的 XML 反序列化器?
  • 或者是否已经存在从 XmlPullParser 构建 Node 树的 Scala 库? (因此可以使用 Scala 投影函数对其进行查询。)
  • 或者对于如何从资源中读取小而复杂的已编译 XML,您有任何其他提示吗?

最佳答案

您使用的 XmlPull 版本似乎不支持命名空间。尝试使用

org.simpleframework.xml.stream.DocumentProvider

这使用 w3c DOM。

关于android - Android XmlResourceParser 的方便使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15944332/

相关文章:

java - Mifare NFC 中字符串之间的字节数是多少?

java - Google PubSub Java (Scala) 客户端收到过多的重发消息

scala - 具有Scala和elastic4s的IndexMissingException

java - fatal error :1:40: Content is not allowed in prolog

java - 使用 Jersey 在 Java RESTful Web 服务中生成 JSON 和 XML 响应

c# - 使用指定为 "utf-16"的编码解析 xml 时出现 XmlException

java - 致命异常 : main on Android 4. x 但不是 Android 2.X

android - Google Analytics for Android 版本错误

java - 修改匿名函数以在 Kotlin 中调用另一个匿名函数

java - 将 Scala 应用程序与 NewRelic Java 代理集成