Wenn ich auf kompilierte Android XML-Ressourcen zugreifen muss, scheint es, dass ich openRawResource(resId)
nicht verwenden kann, da es mir eine kompilierte Binärdatei gibt.Bequemer Gebrauch von Android XmlResourceParser?
Die einzige Möglichkeit, die XML zu erhalten, ist getXml(resId)
, die XmlResourceParser
(die XmlPullParser
implementiert) zurückgibt.
Wie kann ich komplexe kompilierte XML (aber nicht groß) von Android-Ressourcen bequem deserialisieren?
Ich habe versucht, die Simple XML-Framework zu hacken: (. Die Scala Code oben vereinfacht)
val serializer = new Persister()
serializer.read(classOf[AFoo],
new NodeReader(new PullReader(r.getXml(resId))).readRoot)
aber es scheitert:
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)
- Gibt es eine XML-Deserializer, der
getPrefix
nicht aufruft? - Oder gibt es bereits vorhandene Scala-Bibliothek, die einen
Node
Baum aus derXmlPullParser
baut? (So ist es möglich, es mit der Scala-Projektionsfunktion abzufragen.) - Oder haben Sie einen anderen Hinweis, wie man kleine, aber komplexe kompilierte XML aus Ressourcen liest?
Statt XML-Dateien in res/xml das Speichern - haben Sie versucht, sie in res/raw Speicherung? So speichere ich XML-Dokumente, auf die ich direkten Zugriff haben möchte. Der Knick zum Speichern von Schemas/Stylesheets ist, dass die Erweiterung 'xml' sein muss - was ich tue, ist die tatsächliche Erweiterung des Dateinamens .... so wird indent.xsl zu xsl_indent.xml –