当我需要访问已编译的 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/