XmlPullParser - unexpected token (android)
je développe une application, qui sera lu à partir de xml que j'ai étages dans res/xml/experiment.xml mais lorsque j'essaie de l'analyser, il me donne une xmlPullParserException.
Voici ma vraiment simple fichier xml:
<?xml version="1.0" encoding="utf-8"?>
<message>Hello</message>
Voici mon code:
public static void parse(Context ctx) throws XmlPullParserException, IOException {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xpp = factory.newPullParser();
InputStream in = ctx.getResources().openRawResource(R.xml.experiment);
xpp.setInput(in, "UTF_8");
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
String tagName = xpp.getName();
switch (eventType) {
case XmlPullParser.START_TAG:
Log.d("debug", "Entering tag: " + tagName);
break;
case XmlPullParser.TEXT:
Log.d("debug", "Text inside: " + xpp.getText());
break;
case XmlPullParser.END_TAG:
Log.d("debug", "Ending tag: " + tagName);
break;
}
eventType = xpp.next();
}
}
Et ici, c'est l'exception, elle me lance:
03-16 15:38:52.759: W/System.err(28087): org.xmlpull.v1.XmlPullParserException: Unexpected token (position:TEXT ???????????????8??????...@2:112 in java.io.InputStreamReader@42604888)
03-16 15:38:52.759: W/System.err(28087): at org.kxml2.io.KXmlParser.next(KXmlParser.java:426)
03-16 15:38:52.759: W/System.err(28087): at org.kxml2.io.KXmlParser.next(KXmlParser.java:310)
03-16 15:38:52.759: W/System.err(28087): at xmlparsing.Xmlreader.parse(Xmlreader.java:53)
03-16 15:38:52.759: W/System.err(28087): at com.example.androidexperiments.Lifecycle.onCreate(Lifecycle.java:28)
03-16 15:38:52.759: W/System.err(28087): at android.app.Activity.performCreate(Activity.java:5231)
03-16 15:38:52.759: W/System.err(28087): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
03-16 15:38:52.759: W/System.err(28087): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
03-16 15:38:52.759: W/System.err(28087): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
03-16 15:38:52.759: W/System.err(28087): at android.app.ActivityThread.access$800(ActivityThread.java:135)
03-16 15:38:52.759: W/System.err(28087): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
03-16 15:38:52.759: W/System.err(28087): at android.os.Handler.dispatchMessage(Handler.java:102)
03-16 15:38:52.759: W/System.err(28087): at android.os.Looper.loop(Looper.java:136)
03-16 15:38:52.759: W/System.err(28087): at android.app.ActivityThread.main(ActivityThread.java:5017)
03-16 15:38:52.759: W/System.err(28087): at java.lang.reflect.Method.invokeNative(Native Method)
03-16 15:38:52.759: W/System.err(28087): at java.lang.reflect.Method.invoke(Method.java:515)
03-16 15:38:52.759: W/System.err(28087): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-16 15:38:52.759: W/System.err(28087): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-16 15:38:52.759: W/System.err(28087): at dalvik.system.NativeStart.main(Native Method)
J'ai passer quelques heures sur google tente de le résoudre, mais je n'ai encore aucune idée, quelqu'un peut-il m'indiquer où est le problème?
Grâce
Qui est la ligne 53 de votre Xmlreader.java fichier?
Ce un
Ce un
eventType = xpp.next();
OriginalL'auteur David Novák | 2014-03-16
Vous devez vous connecter pour publier un commentaire.
ne sais pas si vous êtes toujours bloqué sur cette. J'avais eu au moins un problème similaire. Je ne dirais pas que j'ai trouvé la solution, mais j'ai trouvé une solution de contournement qui ont aidé dans ma situation, de toute façon. La raison pour laquelle je pense que nous avons le même problème est en raison de ce qu'il dit dans l'exception .. @2:112. Comme vous le savez probablement cela signifie que la ligne 2, colonne 112 de l'entrée. Compte tenu de la brièveté de votre entrée xml, c'est évidemment ridicule que la 2e ligne de l'entrée n'a pas n'importe où près de 112 colonnes. J'ai été voir un même bidon position dans mon exception de mon entrée simple.
Je pense que le problème est peut-être la façon dont vous êtes l'acquisition de l'InputStream:
Si vous prenez le temps de convertir l'entrée dans l'InputStream à une Chaîne de caractères (code peut être trouvé), vous verrez que chaque ligne renvoie des données fausses; il y a beaucoup de caractères indésirables mélangé avec des données xml caractères. Je ne sais pas pourquoi. Peut-être que quelqu'un de plus versé dans la Java de répondre à cette question.. je soupçonne que c'est parce que le fichier xml est ouvert comme une ressource brute (comme il dit) et il doit être ouvert avec un certain type de codage, comme utf-8 pour le traduire correctement.. ? De toute façon, quand j'ai utilisé l'
.openRawResource(..)
fonction, il semble venir avec beaucoup de données inutiles dans le InputStream, qui dépassait les XmlPullParser. Ma solution a été de passer de la .fichier xml à partir de lares/xml/
dossier à laassets
dossier. J'ai ensuite acquis la InputStream de cette manière.Quand je l'ai fait, j'ai remarqué qu'il y avait pas de caractères indésirables dans l'InputStream, et XmlPullParser a été en mesure d'analyser mon dossier, sans aucune exception.
Espère que ça aide, bonne chance.
OriginalL'auteur yano
Je pense que l'erreur pouvait venir de l'encodage que vous avez défini pour votre
XmlPullParser
.Cette ligne est incorrecte:
xpp.setInput(in, "UTF_8");
. Il doit être:xpp.setInput(in, "UTF-8");
. Si cela n'aide pas, vous pouvez même essayer de changer que deux lignes par:Qui ressemble à répondre, à moi aussi.
OriginalL'auteur nKn