XML

        <foo>text</foo>


http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html复制的解析器代码

        XmlPullParserFactory pullParserFactory;
        try {
            pullParserFactory = XmlPullParserFactory.newInstance();
            pullParserFactory.setNamespaceAware(true);
            mParser = pullParserFactory.newPullParser();

            InputStream inputStream = getResources().openRawResource(R.xml.foo);
            mParser.setInput(inputStream, null);
            //mParser.setInput(new StringReader("<foo>text</foo>"));
            int eventType = mParser.getEventType();
            while (eventType != XmlPullParser.END_DOCUMENT) {
                if(eventType == XmlPullParser.START_DOCUMENT) {
                    System.out.println("Start document");
                } else if(eventType == XmlPullParser.START_TAG) {
                    System.out.println("Start tag "+mParser.getName());
                } else if(eventType == XmlPullParser.END_TAG) {
                    System.out.println("End tag "+mParser.getName());
                } else if(eventType == XmlPullParser.TEXT) {
                    System.out.println("Text "+mParser.getText());
                }
                eventType = mParser.next();
            }
            System.out.println("End document");

        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


在第一次调用next()时,它会在下面生成错误,但仅在使用setInput(InputStream,encoding)时才会生成。该示例使用setInput(StringReader),当您使用该版本的setInput时,该方法工作正常;

06-07 12:35:30.992:W / System.err(30950):org.xmlpull.v1.XmlPullParserException:意外令牌(position:TEXT����������������4�� ����... @@ 1:149 in java.io.InputStreamReader@425ceab0)

最佳答案

在此线程上获得了yano的答案:XmlPullParser - unexpected token (android)

您需要将文件从res / xml移到资产,并使用以下代码获取文件:

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


显然,getRawResource()无法正确读取编码,如果仅转储inputstream的内容,则会有很多垃圾字符。

10-05 17:57