android中利用pull解析xml文件

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

 

 

你可能感兴趣的:(xml,android,解析,pull)