2012-06-25 13 views
5

Tôi đang sử dụng XmlPullParser cho xml phân tích cú pháp trong ứng dụng Android của tôi nhưng khi tôi đặt đầu vào như InputStream nó không hoạt động trong khi tôi đặt đầu vào như Reader nó bắt đầu làm việcXmlPullParser không hoạt động với 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(); 
      } 

Thậm chí nếu tôi lưu trữ dữ liệu từ đối tượng InputStream trong một chuỗi và đặt chuỗi đó làm đầu vào thì mã này cũng hoạt động tốt.

+0

khai báo xml (tức là phần "' '") Trong tài liệu của bạn như thế nào? – Jens

+0

\t đây là cấu trúc xml của tôi – Azmat

+1

Bạn có thể đăng mã nơi bạn tạo 'obj '? – Jave

Trả lời

3

Cùng một vấn đề: chuyển InputStream trực tiếp hoạt động tốt trên Android 2.3.3 nhưng không hoạt động trên 4.1. Bạn có thể sử dụng xpp.setInput(new InputStreamReader(obj));

+1

Chạy Android 4.3 và InputStreamReader tạo ra cùng một lỗi. –

0

Got câu trả lời cho một vấn đề tương tự từ Yano về chủ đề này: XmlPullParser - unexpected token (android)

Bạn cần phải di chuyển từ tập tin từ res/xml để tài sản và nhận các tập tin với mã:

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

Rõ ràng getRawResource() không đọc mã hóa đúng cách và nếu bạn vừa đổ nội dung của luồng vào thì có rất nhiều ký tự rác.