2012-06-25 16 views
5
工作

我使用的XML解析XmlPullParser在我的Android應用程序,但是當我設置輸入爲InputStream的它不工作,而我設置輸入作爲讀者它開始工作XmlPullParser不隨同InputStream

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(); 
      } 

即使我存儲來自InputStream對象的數據在一個字符串中並將該String設置爲輸入,那麼這段代碼也可以正常工作。

xpp.setInput(new StringReader(str));//str contains the data from InputStream 
+0

文檔中的xml聲明(即「<?xml version =」1.0「encoding =」UTF-8「?>」「部分)是什麼樣的? – Jens

+0

<?xml version =「1.0」encoding =「UTF-8」standalone =「no」?> \t 這是我的xml結構 – Azmat

+1

您可以發佈代碼, '? – Jave

回答

3

同樣的問題:傳遞InputStream直接在Android 2.3.3上正常工作,但在4.1上不起作用。 您可以使用xpp.setInput(new InputStreamReader(obj));

+1

運行Android 4.3和InputStreamReader生成相同的錯誤。 –

0

得到了來自矢野在此線程類似的問題的答案:XmlPullParser - unexpected token (android)

你需要從文件從RES/XML的移動資產,並與代碼獲取文件:

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

顯然,getRawResource()不能正確讀取編碼,如果只是轉儲輸入流的內容,會有大量垃圾字符。