现在的位置: 首页 > 综合 > 正文

android pull 解析xml

2017年04月16日 ⁄ 综合 ⁄ 共 2338字 ⁄ 字号 评论关闭

Pull简介

   1.常见的XML解析方式有三种,DOM、SAX、Pull,Android系统中推荐使用Pull

   2.Pull解析器是一个开源的Java项目,Android系统内部解析XML文件均为此种方式,也可用于JavaEE项目

   3.Android SDK中已经集成了Pull解析器,无需添加任何jar文件

   4.Pull解析器运行方式与SAX类似,提供各种事件的判断

   5.官方网站:http://xmlpull.org/

使用Pull解析器解析XML文件

  1.  Xml.newPullParser() 获得解析器

  2  parser.setInput(in, "UTF-8") 设置输入流以及编码

  3. parser.next() 获取下一个解析事件,得到一个事件代码

  4. XmlPullParser中定义了常量来标识各种解析事件

      START_DOCUMENT、END_DOCUMENT 、START_TAG 、END_TAG 、TEXT

1.使用pull解析xml

person.xml文件,需要解析的源文件

<?xml version="1.0" encoding="UTF-8"?>
<persons>
    <person id="20">
        <name>zizhu</name>
        <age>20</age>
    </person>
    <person id="30">
        <name>zizhu5</name>
        <age>22</age>
    </person>
</persons>

解析代码:

/**
	 * @param is 输入流
	 * @return 
	 * @throws Exception
	 */
	public List<Person> getPersons(InputStream is) throws Exception{
		List<Person> persons = null;
		Person person = null;
		XmlPullParser pullParse = Xml.newPullParser();//google自带的工具栏生成pullParse,由于android本身集成了pull解析器
		pullParse.setInput(is, "UTF-8");
		int event = pullParse.getEventType();//pull解析器通过事件触发,start document事件需要通过这个方法获得
		while(event != XmlPullParser.END_DOCUMENT){
			switch (event) {
			case XmlPullParser.START_TAG://开始标签
				if("persons".equals(pullParse.getName())){//匹配标签
					persons = new ArrayList<Person>();//初始化
				}
				if("person".equals(pullParse.getName())){
					person = new Person();
					int id = Integer.parseInt(pullParse.getAttributeValue(0));
					person.setId(id);
				}
				if("name".equals(pullParse.getName())){
					String name = pullParse.nextText();//得到标签里面的文本值
					person.setName(name);
				}
				if("age".equals(pullParse.getName())){
					int age = Integer.parseInt(pullParse.nextText());
					person.setAge(age);
				}
				break;
			case XmlPullParser.END_TAG:
				if("person".equals(pullParse.getName())){
					persons.add(person);
					person = null;
				}
				break;
			}
			event = pullParse.next();
		}
		return persons;
	}

2.将数据保存到xml格式的数据

/**
	 * 将数据存成xml格式的数据
	 * @param persons 
	 * @param os 输出流
	 * @throws Exception
	 */
	public void save(List<Person> persons , OutputStream os ) throws Exception{
		XmlSerializer serial = Xml.newSerializer();
		serial.setOutput(os, "UTF-8");
		//xml文档开始
		serial.startDocument("UTF-8", true);//第一个参数是编码,第二个参数表示此xml文件是否能单独存在
		serial.startTag(null, "persons");//根节点
		for(Person person : persons){
			serial.startTag(null, "person");
			serial.attribute(null, "id", person.getId() + "");
			
			//name标签
			serial.startTag(null, "name");
			serial.text(person.getName());
			serial.endTag(null, "name");
			
			//age标签
			serial.startTag(null, "age");
			serial.text(person.getAge() + "");
			serial.endTag(null, "age");
			
			serial.endTag(null, "person");
		}
		serial.endTag(null, "persons");
		serial.endDocument();
		os.flush();
	}

抱歉!评论已关闭.