(以下文章基本照抄《第一行代码》)
解析XML文件有很多方法,这里主要讲Pull解析和SAX解析。这篇文章主要是讲Pull解析。
一、Pull解析参考代码
先上代码:
private void parseXMLWithPull(String xmlData){ try{ XmlPullParserFactory factory = XmlPullPaeserFactory.newInstance(); XmlPullParser xmlPullParser = factory.newPullParser(); xmlPullParser.setInput(new StringReader(xmlData)); int eventType = xmlPullParser.getEventType(); String id = ""; String name = ""; String version = ""; while(eventType != XmlPullParser.END_DOCUMENT){ String nodeName = xmlPullParser.getName(); switch(eventType){ case XmlPullParser.START_TAG:{ if("id".equals(nodeName)){ id = xmlPullParser.nextText(); }else if("name".equals(nodeName)){ name = xmlPullParser.nextText(); }else if("version".equals(nodeName)){ version = xmlPullParser.nextText(); } break; } case XmlPullParser.END_TAG:{ if("app".equals(nodeName){ Log.d("MainActivity","id is " + id); Log.d("MainActivity","name is " + name); Log.d("MainActivity","version is " + version); } break; } default: break; } eventType = xmlPullParser.next(); } } }catch(Exception e){ e.printStackTrace(); } }
二、相关类简述
1、 XmlPullParserFactory
XmlPullParserFactory 类是用来产生XML Pull解析的实现的。我们需要通过获取XmlPullParserFactory类的实例,来获取XML Pull解析接口的实例。
下面是API文档中对XmlPullParserFactory类的描述。
下面是它的方法摘要。
红框内是我们这次用到的方法。
newInstance() 是一个静态方法,作用是产生一个PullParserFactory类的实例。
newPullParser()也是一个静态方法,作用是产生一个XML Pull Parser的实例。
2、XmlPullParser
XmlPullParser不是类,而是一个接口。 XmlPullParser是定义了XMLPULL V1 API中提供的各种解析功能的接口。
这个接口中,两个方法是关键。next() and nextToken() 方法。
next()方法用于获取下一个解析事件。
nextToken()方法和next()方法很类似,但是,如果在input中明确了事件类型,它还可以获取事件类型。
当前解析事件状态可以通过getEventType()方法来获取。
下面的解析事件类型可以通过next()方法获取。
START_TAG : XML 开始标志被读取。
TEXT : XML中的内容被读取。text的内容可以通过getText()方法来获取。
END_TAG : XML 结束标志被读取。
END_DOCUMENT : 没有更多的事件可以获取。
我们使用XmlPullParser接口对XML文件进行解析的方法和使用cursor读取数据库中的数据是类似的。
先获取当前解析事件的状态,如果当前状态不等于结束,那就通过各种方法检索我们想要的内容,最后再获取下一个解析事件状态,循环判断。