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 ...在java.io.InputStreamReader@425ceab0中的@ 1:149
答案 0 :(得分:1)
在这个帖子中得到了yano的答案:XmlPullParser - unexpected token (android)
您需要从res / xml文件移动到资源,并使用以下代码获取文件:
InputStream in = this.getAssets().open("sample.xml");
显然getRawResource()没有正确读取编码,如果你只是转储输入流的内容,那么就会有很多垃圾字符。
答案 1 :(得分:0)
您需要将InputStreamReader传递给setInput
,而不是使用InputStream来设置输入。<强>样品:强>
xpp.setInput(new InputStreamReader(obinputStreamj));
是 - &gt;串
BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line);
}