Pull模式解析原理: 与SAX解析器模拟相似,也提供了类似的事件驱动.使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型元素的值。
Pull模式解析步骤:1、 得到一个XmlPullParser对象这里得到XMLPullParser对象的方式有两种: 1)通过Xml这个工具类的.newPullParser()方式得到 2)通过XmlPullParserFactory工厂创建//得到XmlPullParserFacotry工厂
- XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
-
- XmlPullParser xmlparser = factory.newPullParser();
2、 再根据XmlPullParser对象设置输入流和编码格式
- parser.setInput(inputStream, "UTF-8");
3、 然后循环遍历所有的结点可以通过文档开始的代码来判断读入到哪个节点关于
xmlparser.getEventType()其值有:Start_DOCUMENT:文档开始
END_DOCUMENT:文档结束
START_TAG:开始读标签
END_TAG:标签结束
TEXT:所读的是文本内容一个简单示例:
- import java.io.IOException;
- import java.io.StringReader;
- import org.xmlpull.v1.XmlPullParser;
- import org.xmlpull.v1.XmlPullParserException;
- import org.xmlpull.v1.XmlPullParserFactory;
- public class SimpleXmlPullApp{
- public static void main (String args[]) throws XmlPullParserException, IOException{
-
- XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
- factory.setNamespaceAware(true);
- XmlPullParser xpp = factory.newPullParser();
-
- xpp.setInput( new StringReader ( "<foo>Hello World!</foo>" ) );
-
- int eventType = xpp.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 "+xpp.getName());
-
- } else if(eventType == XmlPullParser.END_TAG) {
-
- System.out.println("End tag "+xpp.getName());
-
- } else if(eventType == XmlPullParser.TEXT) {
-
- System.out.println("Text "+xpp.getText());
-
- }
- eventType = xpp.next();
- }
- System.out.println("End document");
- }
- }
输出结果:
Start documentStart tag fooText Hello World!End tag foo还是以上一节(http://www.linuxidc.com/Linux/2011-11/47140.htm)的例子:读取XML文件里的内容把这些内容构造成一个Person对象,然后读取这个XML文档里内容将其Person对象添加到一个List集合里
person.xml:- <?xml version="1.0" encoding="UTF-8"?>
- <persons>
- <person id="23">
- <name>李明</name>
- <age>30</age>
- </person>
- <person id="20">
- <name>李向梅</name>
- <age>25</age>
- </person>
- </persons>