采用Pull解析器解析和生成XML内容
来源:互联网 发布:thinksns app源码 编辑:程序博客网 时间:2024/05/16 07:25
Pull解析器是一个开源的java项目,既可以用于android,也可以用于JavaEE。如果用在javaEE需要把其jar文件放入类路径中,因为Android已经集成进了Pull解析器,所以无需添加任何jar文件。android系统本身使用到的各种xml文件,其内部也是采用Pull解析器进行解析的。Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。跟SAX不同的是,Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。
1.工程目录结构
person.xml
<?xml version="1.0" encoding="UTF-8"?><persons> <person id="23"> <name>leehom</name> <age>38</age> </person> <person id="20"> <name>leoleo</name> <age>22</age> </person></persons>
2.1 person.java
package com.example.domain;public class Person { private Integer id; private String name; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; } public Person(Integer id, String name, Integer age) { super(); this.id = id; this.name = name; this.age = age; } public Person() { super(); // TODO Auto-generated constructor stub }}
2.2 PersonService.java
package com.example.service;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlSerializer;import android.util.Xml;import com.example.domain.Person;public class PersonService { /** * 获取数据 * * @param xml * @return * @throws Exception */ public static List<Person> getPersons(InputStream xml) throws Exception { List<Person> persons = null; Person person = null; XmlPullParser pullParser = Xml.newPullParser(); pullParser.setInput(xml, "utf-8");// 为pull解析器设置要解析的xml数据 int event = pullParser.getEventType(); while (event != XmlPullParser.END_DOCUMENT) { switch (event) { case XmlPullParser.START_DOCUMENT: persons = new ArrayList<Person>(); break; case XmlPullParser.START_TAG: if ("person".equals(pullParser.getName())) { int id = new Integer(pullParser.getAttributeValue(0)); person = new Person(); person.setId(id); } else if ("name".equals(pullParser.getName())) { String name = pullParser.nextText(); person.setName(name); } else if ("age".equals(pullParser.getName())) { int age = new Integer(pullParser.nextText()); person.setAge(age); } break; case XmlPullParser.END_TAG: if ("person".equals(pullParser.getName())) { persons.add(person); person = null; } break; } event = pullParser.next(); } return persons; } /** * 保存数据 * * @param persons * @param outStream * @throws Exception */ public static void save(List<Person> persons, OutputStream outStream) throws Exception { XmlSerializer serializer = Xml.newSerializer(); // 创建xml的序列化文件 serializer.setOutput(outStream, "UTF-8"); // 传入保存的输出流,和字符集编码 serializer.startDocument("UTF-8", true); // xml头标签字符集设置,是否序列化 serializer.startTag(null, "persons"); // 开始节点设置,(命名空间null,名称persons) for (Person person : persons) { // 循环设置每个节点的属性和数据 serializer.startTag(null, "person"); serializer.attribute(null, "id", person.getId().toString()); serializer.startTag(null, "name"); serializer.text(person.getName()); serializer.endTag(null, "name"); serializer.startTag(null, "age"); serializer.text(person.getAge().toString()); serializer.endTag(null, "age"); serializer.endTag(null, "person"); } serializer.endTag(null, "persons"); // 设置结束节点 serializer.endDocument(); // 结束xml编辑,即设置xml文档结尾 outStream.flush(); // 最好先将缓存中数据刷出再关闭输出流以防传入的流是缓存流 outStream.close(); }}
2.3 PersonServiceTest.java
package com.example.test;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import android.test.AndroidTestCase;import android.util.Log;import com.example.domain.Person;import com.example.service.PersonService;public class PersonServiceTest extends AndroidTestCase { private static final String TAG="PersonServiceTest"; public void testPersons() throws Exception{ InputStream xml = this.getClass().getClassLoader().getResourceAsStream("person.xml"); List<Person> persons = PersonService.getPersons(xml); for(Person person :persons){ Log.i(TAG, person.toString()); } } public void testSave() throws Exception{ List<Person> persons = new ArrayList<Person>(); persons.add(new Person(1, "leo1", 21)); persons.add(new Person(2, "leo2", 22)); persons.add(new Person(3, "leo3", 23)); //包 /files File xmlFile = new File(getContext().getFilesDir(), "leoleohan.xml"); FileOutputStream outStream = new FileOutputStream(xmlFile); PersonService.save(persons, outStream); }}
3 0
- Android 采用Pull解析器解析和生成XML内容
- 采用Pull解析器解析和生成XML内容
- 采用Pull解析器解析和生成XML内容
- 采用Pull解析器生成XML内容
- 采用Pull解析器解析XML内容
- Android学习笔记---15_采用Pull解析器解析和生成XML内容
- Android学习笔记---15_采用Pull解析器解析和生成XML内容
- Android开发入门之采用Pull解析器解析和生成XML内容
- 实例教程四:采用Pull解析器解析和生成XML内容
- Android开发系列(八):采用Pull解析器解析和生成XML内容
- android采用pull解析器解析和生成XML
- Pull解析和生成XML
- pull解析和生成xml
- pull解析和生成xml
- Pull解析器解析XML文件和生成XML文件
- 使用Pull解析器生成和解析XML文件
- Android使用pull解析器解析和生成xml
- 使用pull解析器解析和生成xml文件
- ORACLE中用rownum分页并排序的SQL语句
- VIM终极使用技巧
- 如何能够有效禁止u盘自动运行
- Android Instrumentation 判断跳转后的Activity
- HDU 2066 一个人的旅行(最短路)
- 采用Pull解析器解析和生成XML内容
- 窗口和控件闪烁解决方案
- Sql Server基础知识总结
- poj3240
- 添加考试功能总结
- 用Python和Pygame写游戏-从入门到精通(10)
- 详解Oracle的几种分页查询语句
- 文字阴影效果
- vb(3) 将excel导入grid