XmlPullParser.netText()方法的示例分析

  介绍

这篇文章主要介绍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 结果,,,   null

XmlPullParser.netText()方法的示例分析