介绍
这篇文章主要介绍XmlPullParser.netText()方法的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
在Android上使用XmlPullParser是一中高效率和易维护解析XML的方法.Android已经在历史上有两个实现这个接口实现类:
- <李>
KXmlParser,通过XmlPullParserFactory。newPullParser () .
李> <李>ExpatPullParser,通过Xml。newPullParser () .
李>实现Xml。newPullParser()调用nextText()有个错误,nextText()并不总是向文档中所提到优先于END_TAG执行。
因此,一些应用可能会出现错误在额外调下()或用nextTag ();
throws XmlPullParserException, IOException {,, ,,,XmlPullParser parser =, Xml.newPullParser ();,, ,,,parser.setInput(读者);,, ,, ,,,parser.nextTag ();,, ,,,parser.require (XmlPullParser.START_TAG, null,,“menu");,, ,,,while (parser.nextTag (),==, XmlPullParser.START_TAG), {,, ,,,,,,,parser.require (XmlPullParser.START_TAG, null,,“item");,, ,,,,,,,String itemText =, parser.nextText ();,, ,,,,,,,parser.nextTag();,//,却;能够call 应该't be 必要!,, ,,,,,,,parser.require (XmlPullParser.END_TAG, null,,“item");,, ,,,,,,,System.out.println (“menu 选择:,,,+,itemText);,, ,,,},, ,,,parser.require (XmlPullParser.END_TAG, null,,“menu");,, },, ,, public static  void main (String [], args), throws Exception {,, ,,,new 菜单().parseXml (new StringReader (“& lt; ? xml version=& # 39; 1.0 & # 39; ?祝辞,,, ,,,,,,,,,,,+,“& lt; menu>,,, ,,,,,,,,,,,和,,,,& lt; item> Waffles,,, ,,,,,,,,,,,和,,,,& lt; item> Coffee,,, ,,,,,,,,,,,+,“& lt;/menu>“),,, }
在android4.0中,改变了Xml.newPullParser()返回KxmlParser类,同时删除了ExpatPullParser类。这样就修正了nextTag()的错误。
不幸的是,当前可能会崩溃的应用程序都是低于android4.0版本的,下面是错误信息。
org.xmlpull.v1.XmlPullParserException:,:, END_TAG {零}item (位置:START_TAG & lt; item> @1:37 拷贝java.io.StringReader@40442fa8),,, ,,,,at org.kxml2.io.KXmlParser.require (KXmlParser.java: 2046),, ,,,,at com.publicobject.waffles.Menu.parseXml (Menu.java: 25),, ,at com.publicobject.waffles.Menu.main (Menu.java: 32)
解决的办法是只有在调用nextText()之后再跳用nextTag(),仅当当前的位置不是END_TAG。
while (parser.nextTag (),==, XmlPullParser.START_TAG), {,, ,,,,parser.require (XmlPullParser.START_TAG, null,,“item");,, ,,,,String itemText =, parser.nextText ();,, ,,,,if (parser.getEventType (), !=, XmlPullParser.END_TAG), {,, ,,,,,,,,parser.nextTag ();,, ,,,,},, ,,,,parser.require (XmlPullParser.END_TAG, null,,“item");,, ,,,,System.out.println (“menu 选择:,,,+,itemText);,, 以前,}>上面的代码可以正确解析所有xml版本,如果应用程序广范的使用了nextText(),那就在使用nextText()的地方用下面的辅助方法。
private String safeNextText (XmlPullParser 解析器),, ,,,,,,,,throws XmlPullParserException, IOException {,, ,,,,String result =, parser.nextText ();,, ,,,,if (parser.getEventType (), !=, XmlPullParser.END_TAG), {,, ,,,,,,,,parser.nextTag ();,, ,,,,},, ,,,,return 结果,,, nullXmlPullParser.netText()方法的示例分析