Pull解析XML格式数据

来源:互联网 发布:lol挂机辅助软件 编辑:程序博客网 时间:2024/05/17 04:46

使用到的XML文件为:

<?xml version="1.0" encoding="utf-8" ?>  <persons>    <person id = "1">       <name>张三</name>   <age>23</age></person> <person id = "2">       <name>李四</name>   <age>24</age></person> <person id = "3">       <name>王五</name>   <age>25</age></person>  </persons>

Pull解析器是一个开源的Java项目,也是Android系统内置的xml解析器,Pull解析器跟SAX很相似,他提供了类似的事件:如开始和结束元素,使用parser.next()可以进行下一个元素及触发相应的事件,跟SAX不同的是,Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理,当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。

需使用第三方的jar包kxml2-2.2.2.jar

解析代码为:

package com.xiaomage;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserFactory;import com.xiaomage.bean.Person;/*** * Pull解析XML *  * @author xiaomage *  */public class PullParserXML {/*** * 解析XML格式数据 *  * @param inputStream *            输入流 * @param encode *            编码 * @return */public static List<Person> parserXML(InputStream inputStream, String encode)throws Exception {/** 存储解析的所有数据 **/List<Person> list = null;/** 存储当前解析的数据 **/Person person = null;// 创建Pull解析工厂XmlPullParserFactory xpf = XmlPullParserFactory.newInstance();// 创建Pull解析类引用XmlPullParser parser = xpf.newPullParser();// 设置输入parser.setInput(inputStream, encode);// 获取事件类型int enType = parser.getEventType();// 判断事件的类型while (enType != XmlPullParser.END_DOCUMENT) {switch (enType) {case XmlPullParser.START_DOCUMENT: // XML文件开始解析list = new ArrayList<Person>();break;case XmlPullParser.START_TAG: // XML文件标签开始解析if ("person".equals(parser.getName())) {person = new Person();// 取出里面的属性值int id = Integer.parseInt(parser.getAttributeValue(0));person.setId(id);} else if ("name".equals(parser.getName())) {// 取出节点元素的值String name = parser.nextText();person.setName(name);} else if ("age".equals(parser.getName())) {// 取出节点元素的值int age = Integer.parseInt(parser.nextText());person.setAge(age);}break;case XmlPullParser.END_TAG: // XML文件标签解析结束if ("person".equals(parser.getName())) {list.add(person);person = null;}break;}enType = parser.next();}return list;}}


0 0