2012-06-25 8 views
5

Ich verwende XmlPullParser für das Parsen von XML in meiner android app, aber wenn ich Eingabe als Input eingestellt es nicht funktioniert, während ich Eingabe als Reader eingestellt es zu arbeiten beginntXmlPullParser nicht mit Input arbeiten

XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
factory.setNamespaceAware(true); 
XmlPullParser xpp = factory.newPullParser(); 
xpp.setInput(obj,null);//obj is the object of InputStream 
int eventType = xpp.getEventType(); 
while (eventType != XmlPullParser.END_DOCUMENT) { 
       logger.println("eventType.."+eventType); 
       if(eventType == XmlPullParser.START_DOCUMENT) { 

        // control goes here only 

       } else if(eventType == XmlPullParser.START_TAG) { 
        //This block never executed 
        } 

       } else if(eventType == XmlPullParser.END_TAG) { 
       //This block never executed 
       } else if(eventType == XmlPullParser.TEXT) { 

       } 
       eventType = xpp.next(); 
      } 

Auch wenn ich speichern Daten aus dem InputStream-Objekt in einer Zeichenfolge und setzen diese Zeichenfolge als Eingabe, dann funktioniert dieser Code auch einwandfrei.

+0

Wie sieht die XML-Deklaration (d. H. Der "' "" Teil) in Ihrem Dokument aus? – Jens

+0

\t das ist meine xml-Struktur – Azmat

+1

Kannst du den Code dort posten, wo du 'obj erstellt hast? '? – Jave

Antwort

3

Das gleiche Problem: Passing InputStream funktioniert direkt auf Android 2.3.3, funktioniert aber nicht auf 4.1. können Sie verwenden xpp.setInput(new InputStreamReader(obj));

+1

Running Android 4.3 und InputStreamReader generiert den gleichen Fehler. –

0

die Antwort für ein ähnliches Problem von Yano auf diesen Thread Got: XmlPullParser - unexpected token (android)

Sie müssen aus der Datei aus res/xml zu Vermögen bewegen und die Datei mit dem Code zu erhalten:

InputStream in = this.getAssets().open("sample.xml"); 

Anscheinend liest getRawResource() die Codierung nicht richtig und wenn Sie nur den Inhalt des Eingabestroms ausgeben, gibt es viele überflüssige Zeichen.