Pull解析和Sax解析很相似,都是轻量级的解析,在Android的内核中已经嵌入了Pull,所以我们不需要再添加第三方jar包来支持Pull。Pull解析和Sax解析不一样的地方有(1)pull读取xml文件后触发相应的事件调用方法返回的是数字(2)pull可以在程序中控制想解析到哪里就可以停止解析
有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中;或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器。
需要解析的xml文件如下
android.xml位置放在src目录下
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="1">
<name>张三</name>
<age>20</age>
</person>
<person id="2">
<name>李四</name>
<age>30</age>
</person>
</persons>
将Person对象封装起来的bean为
package com.lamp.domain;
public class Person {
private Integer id = null;
private String name = null;
private Integer age = null;
public Person(){}
public Person(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = 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;
}
}
业务层解析代码如下
package com.lamp.service;
import java.io.IOException;
import java.io.InputStream;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;
import android.util.Xml;
import com.lamp.domain.Person;
public class PullPersonService {
public static String PERSON = "person";
public static String NAME = "name";
public static String AGE = "age";
public static String PERSONS = "persons";
//从xml文件中读取数据
public static List<Person> pullReadXml(InputStream is) throws Exception {
List<Person> personList = null;
Person person = null;
XmlPullParser parser = Xml.newPullParser();
parser.setInput(is, "UTF-8");
int eventCode = parser.getEventType();
while (eventCode != XmlPullParser.END_DOCUMENT) {
switch (eventCode) {
case XmlPullParser.START_DOCUMENT:
personList = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
//判断开始标签元素是否是person
if(PERSON.equals(parser.getName())){
person = new Person();
person.setId(new Integer(parser.getAttributeValue(0)));
}else if(person != null){
if(NAME.equals(parser.getName())){
person.setName(parser.nextText());
}if(AGE.equals(parser.getName())){
person.setAge(new Integer(parser.nextText()));
}
}
break;
case XmlPullParser.END_TAG:
if(PERSON.equals(parser.getName()) && person!=null){
personList.add(person);
person = null;
}
break;
}
//进入下一个元素并触发相应事件
eventCode = parser.next();
}
return personList;
}
//将数据写入xml文件
public static void writeToXml(List<Person> personList,Writer writer) throws Exception, IllegalStateException, IOException{
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(writer);
serializer.startDocument("UTF-8", true);
serializer.startTag(null, PERSONS);
for(Person person : personList){
serializer.startTag(null, PERSON);
serializer.attribute(null, "id", String.valueOf(person.getId()));
serializer.startTag(null, NAME);
serializer.text(person.getName());
serializer.endTag(null, NAME);
serializer.startTag(null, AGE);
serializer.text(String.valueOf(person.getAge()));
serializer.endTag(null, AGE);
serializer.endTag(null, PERSON);
}
serializer.endTag(null, PERSONS);
serializer.endDocument();
writer.flush();
writer.close();
}
}
最后通过JUnit进行测试
package com.lamp.service;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.SAXException;
import android.content.Context;
import android.test.AndroidTestCase;
import android.util.Log;
import com.lamp.domain.Person;
public class PersonServiceTest extends AndroidTestCase {
private static final String TAG = "PersonServiceTest";
//测试读取xml文件
public void testReadXML() throws Exception, SAXException, IOException{
InputStream is = PersonServiceTest.class.getClassLoader().getResourceAsStream("android.xml");
List<Person> persons = PullPersonService.pullReadXml(is);
for(Person person : persons){
Log.i(TAG, person.getName());
}
}
//测试写xml数据
public void testWriteToXml() throws Exception{
//写到手机中
//FileOutputStream os = this.getContext().openFileOutput("persons.xml", Context.MODE_PRIVATE);
//写到SDK卡中
FileOutputStream os = new FileOutputStream(new File(Environment.getExternalStorageDirectory(),"persons.xml"));
OutputStreamWriter writer = new OutputStreamWriter(os,"UTF-8");
BufferedWriter bufWriter = new BufferedWriter(writer);
List<Person> personList = new ArrayList<Person>();
personList.add(new Person(1,"张三",30));
personList.add(new Person(2,"李四",50));
personList.add(new Person(3,"王五",70));
PullPersonService.writeToXml(personList, bufWriter);
}
}
分享到:
相关推荐
pull解析和生成xml文件,使用pull解析本地的xml文件,并且生成了一个不同格式的新的xml文件
一个eclipse工程包含如何使用android中自带的xml解析器pull,解析和生成xml文件
Android利用pull生成xml文件
支持SAX解析XML文件,DOM解析XML文件,Pull解析器解析XML文件,Pull生成XML文件,JAVA和Kotlin两种语言编写
主要针对android中的xml文件进行解析
android pull解析 创建xmlw文件,完整工程项目,可直接运行
这是一个完整的eclipse项目,直接打开就可以看到整个项目完整的代码,而且有单元测试代码
@Introduction:使用PULL方法进行XML解析 XML文件存放在SDcard根目录下;android1.6版本之前是在/sdcard/,之后是在/mnt/sdcard/ 当前测试用来运行的版本是android。4.2.2 最小支持的版本是android.2.2.0 文件...
三种方式解析XML 提供创建XML方法 本地三种方式解析 网络三种方式解析 一共7个 需要的下 带文件编码识别 相当强大哦
Android系统中和创建XML相关的包为org.xmlpull.v1,在这个包中不仅提供了用于创建XML的 XmlSerializer,还提供了用来解析XML的Pull方式解析器 XmlPullParser XmlSerializer没有像XmlPullParser那样提取XML事件,而是...
Ø “文档对象模型”方式,解析完的Xml将生成一个树状结构的对象。 Ø 2、SAX(org.xml.sax) Ø SimpleAPI for XML,以事件的形式通知程序,对Xml进行解析。 Ø 3、XMLPULL(org.xmlpull.v1) Ø 类似于SAX方式,程序以...
里面包含三种android解析XML方式:使用DOM解析本地XML,使用SAX解析网络XML文件,使用PULL解析网络XML。文档中附解析XML文件,解析源码,解析XML应注意问题。其中SAX,PULL是万能助手类(只需要有对应的XML源,给XML...
本篇文章包含以下内容: XML数据的Dom解析 XML数据的Sax解析 XML数据的Pull解析 Activity中使用三种解析 Sax解析与Pull解析区别 ...一、在Assets文件夹中模拟创建XML文件 <name
android解析XML 文档及源码 大多数与XML 相关的Java API 在Android 上得到了完全支持,在Android 上可以创建功能强大的移动应用程序,而在Android 上解析XML的技术有三种DOM、SAX、PULL。
黑马安卓基础 总共8天教程。...21_采用pull解析 解析xml文件.avi 20_知识点补充.avi 22_通过断点调试分析pull解析的原理.avi 23_生成xml文件.avi 24_如何创建数据库oncreate和onupdate方法.avi 25_数据库的增删改查.avi
它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。
息,12_文件的保存与读取,13_文件的操作模式,14_把文件存放在SDCard,15_采用Pull解析器解析和生成XML内容,16_采 用SharedPreferences保存用户偏好设置参数,17_创建数据库与完成数据添删改查,18_在SQLite中...
息,12_文件的保存与读取,13_文件的操作模式,14_把文件存放在SDCard,15_采用Pull解析器解析和生成XML内容,16_采 用SharedPreferences保存用户偏好设置参数,17_创建数据库与完成数据添删改查,18_在SQLite中...
本文实例讲述了Android中常用的XML生成方法。分享给大家供大家参考。具体如下: 1. java代码: .../**采用pull 生成xml文件 * * @author antkingwei * */ public class PullBuildXMLService { public void
创建和解析xml文件,其中用Pull方法解析内容及其标签属性