android pull 解析xml

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(); }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值