首先是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);
}

}

更多相关文章

  1. Android创建和删除桌面快捷方式
  2. android 按纽状态配置文件
  3. Android(安卓)各种Context区别
  4. android 中对xml 进行解析
  5. Memory Analyzer(MAT)打开android eclipse Dump内存文件出现 Unkno
  6. Android(安卓)Re-installation failed解决方法
  7. Android文件读写包含SDCard
  8. android曲线图
  9. NPM 和webpack 的基础使用

随机推荐

  1. 10 张图!给你整明白单点登录原理与实现!
  2. 虽说 JDK 14 性能提升,但 JDK 8 仍是最强
  3. 面试懵了:StringBuilder为什么线程不安全
  4. 一文教您通过 Docker 快速搭建各种测试环
  5. Postgresql管理_创建数据库
  6. 项目中常用的19条MySQL优化,你知道几个?
  7. 我的第36个代码
  8. 你还在用 Date?赶快试试 LocalDateTime 吧
  9. SQL的各种连接Join详解,都需要熟练掌握!
  10. 如何在 Java8 中风骚走位避开空指针异常