0

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: 意外令牌(位置:TEXT ��������������4�� ����...@1:149 在 java.io.InputStreamReader@425ceab0)

4

2 回答 2

1

在这个线程上得到了 yano 的答案:XmlPullParser - 意外令牌(android)

您需要从文件从 res/xml 移动到 assets 并使用代码获取文件:

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

显然 getRawResource() 没有正确读取编码,如果你只是转储输入流的内容,就会有很多垃圾字符。

于 2014-06-07T17:25:39.500 回答
0

您需要将 InputStreamReader 传递给 setInput,而不是使用 InputStream 来设置输入

样本:

xpp.setInput(new InputStreamReader(obinputStreamj));

是 -> 字符串

 BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
    total.append(line);
}
于 2014-06-07T16:50:14.620 回答