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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章