android中利用pull解析xml文件
2013-04-07 22:51
302 查看
首先是service层的类:
package cn.jbit.service;
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 cn.jbit.entity.Person;
/**
* 使用 pull 解析 xml 文档
* @author Administrator
*
*/
public class PullXmlfile {
/**
* 使用 pull 解析 xml 文档
* @param pulllparser
* @return
* @throws Exception
*/
public List<Person> getXmlPersion(InputStream xml) throws Exception{
List<Person> persons =new ArrayList<Person>();
Person person=null;
// 得到该对象 有两种方法,其中,第一个是 利用 XmlPullParserFactory 工厂得到, 第二个是利用android提供的API得到
// XmlPullParser pullparser =XmlPullParserFactory.newInstance().newPullParser();
XmlPullParser pullparser =Xml.newPullParser();
pullparser.setInput(xml,"UTF-8"); // 为创建的pull对象创建 输入流
int event =pullparser.getEventType(); // 表示获取一个节点
while(event!=XmlPullParser.END_DOCUMENT){ // 根据 xml 文件的 语法结构 这是获得 是否是最后一个节点
switch (event) {
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.START_TAG:
if("person".equals(pullparser.getName())){
person=new Person();
person.setId(new Integer(pullparser.getAttributeValue(0)));
}
if("name".equals(pullparser.getName())){
person.setName(pullparser.nextText());
}
if("age".equals(pullparser.getName())){
person.setAge(new Integer(pullparser.nextText()));
}
break;
case XmlPullParser.END_TAG:
if("person".equals(pullparser.getName())){
persons.add(person);
person =null;
}
break;
}
event=pullparser.next(); // 把读取 节点的指针 指定到 下一个节点
}
return persons;
}
/***
* 保存数据到 xml 文件中
* @param persions
* @param xmlfile 为 xml 创建 输出流 ,注意输出流是要 针对于 本应用程序而已哦
* @throws Exception
* @throws IllegalStateException
* @throws IllegalArgumentException
*/
public static void saveFilexml(List<Person> persions,OutputStream out) throws IllegalArgumentException, IllegalStateException, Exception{
XmlSerializer serializer =Xml.newSerializer(); // 为xml文件创建了 序列化 对象
serializer.setOutput(out, "UTF-8"); // 为序列化对 指定 输出流
serializer.startDocument("UTF-8", true); // true 是否允许单独存在为一个文件,注意它的成对出现性
serializer.startTag(null, "persons");
for(Person p: persions){
serializer.startTag(null, "person");
serializer.attribute(null, "id",String.valueOf(p.getId())); // 这是persons 的id属性值
serializer.startTag(null, "name");
serializer.text(p.getName());
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text(String.valueOf(p.getAge()));
serializer.endTag(null, "age");
serializer.endTag(null, "person");
}
serializer.endTag(null, "persons");
serializer.endDocument();
out.flush(); // 这里这样做 是为了 避免是 由 缓存 提交过来的数据
out.close(); // 一定要记得关闭
}
}
以下是:
package cn.jbit.testcase;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import cn.jbit.entity.Person;
import cn.jbit.service.PullXmlfile;
import android.test.AndroidTestCase;
import android.util.Log;
public class PersonTestCase extends AndroidTestCase {
public void testPerson () throws Exception{
PullXmlfile pullxml =new PullXmlfile();
InputStream xml =this.getClass().getClassLoader().getResourceAsStream("person.xml");// 获取输入流
List<Person> persions =pullxml.getXmlPersion(xml);
for(Person msg:persions){
Log.i("PersonTestCase", msg.getName());
}
}
public void testSave() throws Exception{
List<Person> persions =new ArrayList<Person>();
persions.add(new Person("张三",23,6));
persions.add(new Person("李四",25,7));
persions.add(new Person("王五",13,8));
persions.add(new Person("赵六",43,9));
persions.add(new Person("zhangXX",20,10));
File file =new File(getContext().getFilesDir(),"persons.xml"); // 这里获得是当前的包路劲哦
FileOutputStream xmlfile =new FileOutputStream(file,true);
PullXmlfile.saveFilexml(persions, xmlfile);
}
}
package cn.jbit.service;
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 cn.jbit.entity.Person;
/**
* 使用 pull 解析 xml 文档
* @author Administrator
*
*/
public class PullXmlfile {
/**
* 使用 pull 解析 xml 文档
* @param pulllparser
* @return
* @throws Exception
*/
public List<Person> getXmlPersion(InputStream xml) throws Exception{
List<Person> persons =new ArrayList<Person>();
Person person=null;
// 得到该对象 有两种方法,其中,第一个是 利用 XmlPullParserFactory 工厂得到, 第二个是利用android提供的API得到
// XmlPullParser pullparser =XmlPullParserFactory.newInstance().newPullParser();
XmlPullParser pullparser =Xml.newPullParser();
pullparser.setInput(xml,"UTF-8"); // 为创建的pull对象创建 输入流
int event =pullparser.getEventType(); // 表示获取一个节点
while(event!=XmlPullParser.END_DOCUMENT){ // 根据 xml 文件的 语法结构 这是获得 是否是最后一个节点
switch (event) {
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.START_TAG:
if("person".equals(pullparser.getName())){
person=new Person();
person.setId(new Integer(pullparser.getAttributeValue(0)));
}
if("name".equals(pullparser.getName())){
person.setName(pullparser.nextText());
}
if("age".equals(pullparser.getName())){
person.setAge(new Integer(pullparser.nextText()));
}
break;
case XmlPullParser.END_TAG:
if("person".equals(pullparser.getName())){
persons.add(person);
person =null;
}
break;
}
event=pullparser.next(); // 把读取 节点的指针 指定到 下一个节点
}
return persons;
}
/***
* 保存数据到 xml 文件中
* @param persions
* @param xmlfile 为 xml 创建 输出流 ,注意输出流是要 针对于 本应用程序而已哦
* @throws Exception
* @throws IllegalStateException
* @throws IllegalArgumentException
*/
public static void saveFilexml(List<Person> persions,OutputStream out) throws IllegalArgumentException, IllegalStateException, Exception{
XmlSerializer serializer =Xml.newSerializer(); // 为xml文件创建了 序列化 对象
serializer.setOutput(out, "UTF-8"); // 为序列化对 指定 输出流
serializer.startDocument("UTF-8", true); // true 是否允许单独存在为一个文件,注意它的成对出现性
serializer.startTag(null, "persons");
for(Person p: persions){
serializer.startTag(null, "person");
serializer.attribute(null, "id",String.valueOf(p.getId())); // 这是persons 的id属性值
serializer.startTag(null, "name");
serializer.text(p.getName());
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text(String.valueOf(p.getAge()));
serializer.endTag(null, "age");
serializer.endTag(null, "person");
}
serializer.endTag(null, "persons");
serializer.endDocument();
out.flush(); // 这里这样做 是为了 避免是 由 缓存 提交过来的数据
out.close(); // 一定要记得关闭
}
}
以下是:
package cn.jbit.testcase;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import cn.jbit.entity.Person;
import cn.jbit.service.PullXmlfile;
import android.test.AndroidTestCase;
import android.util.Log;
public class PersonTestCase extends AndroidTestCase {
public void testPerson () throws Exception{
PullXmlfile pullxml =new PullXmlfile();
InputStream xml =this.getClass().getClassLoader().getResourceAsStream("person.xml");// 获取输入流
List<Person> persions =pullxml.getXmlPersion(xml);
for(Person msg:persions){
Log.i("PersonTestCase", msg.getName());
}
}
public void testSave() throws Exception{
List<Person> persions =new ArrayList<Person>();
persions.add(new Person("张三",23,6));
persions.add(new Person("李四",25,7));
persions.add(new Person("王五",13,8));
persions.add(new Person("赵六",43,9));
persions.add(new Person("zhangXX",20,10));
File file =new File(getContext().getFilesDir(),"persons.xml"); // 这里获得是当前的包路劲哦
FileOutputStream xmlfile =new FileOutputStream(file,true);
PullXmlfile.saveFilexml(persions, xmlfile);
}
}
相关文章推荐
- android利用HttpURLConnection+XmlPullParser解析Xml文件
- android应用开发之利用SAX、DOM和Pull实现对XML文件的解析并进行单元测试
- 【玩转Android-01】AndroidXML文件解析之Pull解析
- android利用pull技术来解析和生成xml文件
- Android实战技巧:用Pull方法解析XML文件
- 利用PULL解析方式解析XML文件
- Android开发8――利用pull解析器读写XML文件
- Android中的XML解析与生成——Pull解析xml、实现xml文件的生成
- android——使用pull解析xml文件
- Android xml文件解析 SAX,DOM,PULL
- Android编程解析XML文件的方法详解【基于XmlPullParser】
- Android 中利用SAX ,Dom,pull解析 XML 文件
- 个人安卓学习笔记---分别利用SAX、DOM和Pull实现对XML文件的解析并进行单元测试
- Android解析XML文件的三方法之PULL
- Android数据存储之XmlPull解析XML文件(读取部分)
- Android开发进阶(二)--XML文件解析之PULL模式解析
- Android 解析XML文件的三种方式 DOM,SAX,PULL
- android 使用pull 方式解析 xml文件
- Android开发学习---使用XmlPullParser解析xml文件
- Android学习第七天————通过android提供的XmlPullParserFactory解析XML文件