您的位置:首页 > 移动开发 > Android开发

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

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: