pull读取xml--android

pull解析xml文件,和sax和dom一样 都可以脱离android单独使用,pull和sax的原理一样,不一样的地方是pull读取xml文件后调用方法返回的是数字,
   读取到xml的声明返回数字0 START_DOCUMENT;
   读取到xml的结束返回数字1 END_DOCUMENT ;
   读取到xml的开始标签返回数字2 START_TAG
   读取到xml的结束标签返回数字3 END_TAG
   读取到xml的文本返回数字4 TEXT

   pull是开源的项目 源码下载地址http://www.xmlpull.org/
  service中的代码

Java代码
  1. package com.leequer.Service;   
  2.   
  3. import java.io.InputStream;   
  4. import java.util.ArrayList;   
  5. import java.util.List;   
  6.   
  7.   
  8. import org.xmlpull.v1.XmlPullParser;   
  9.   
  10. import android.util.Xml;   
  11.   
  12. import com.leequer.Doem.Person;   
  13. /**  
  14.  * 使用pull解析xml  
  15.  * 2010-04-26  
  16.  * @author leequer  
  17.  *  
  18.  */  
  19. public class ReadXmlByPullService {   
  20.        
  21.     public static List<Person> ReadXmlByPull (InputStream inputStream)throws Exception   
  22.     {   
  23.         List <Person> personList = null;   
  24.         /**  
  25.          * android给我们提供了xml 用来得到xmlpull解析器  
  26.          */  
  27.         XmlPullParser xmlpull = Xml.newPullParser();   
  28.         /**  
  29.          * 将输入流传入 设定编码方式  
  30.          *   
  31.          */  
  32.         xmlpull.setInput(inputStream, "utf-8");   
  33.         /**  
  34.          * pull读到xml后 返回数字  
  35.          *     读取到xml的声明返回数字0 START_DOCUMENT;  
  36.                读取到xml的结束返回数字1 END_DOCUMENT ;  
  37.                读取到xml的开始标签返回数字2 START_TAG  
  38.                读取到xml的结束标签返回数字3 END_TAG  
  39.                读取到xml的文本返回数字4 TEXT  
  40.          */  
  41.         int eventCode = xmlpull.getEventType();   
  42.         /**  
  43.          * 只要这个事件返回的不是1 我们就一直读取xml文件  
  44.          */  
  45.         Person person = null;   
  46.         while(eventCode!=XmlPullParser.END_DOCUMENT)   
  47.         {   
  48.                
  49.             switch (eventCode)   
  50.             {   
  51.                 case XmlPullParser.START_DOCUMENT:   
  52.                 {//开始文档 new数组   
  53.                     personList =new  ArrayList<Person>();   
  54.                     break;   
  55.                 }   
  56.                 case XmlPullParser.START_TAG:   
  57.                 {   
  58.                     if("person".equals(xmlpull.getName()))   
  59.                     {   
  60.                         person =  new Person();   
  61.                         person.setId(xmlpull.getAttributeValue(0));   
  62.                     }else if (person!=null)   
  63.                     {   
  64.                         if(("name".equals(xmlpull.getName())))   
  65.                         {   
  66.                             /**  
  67.                              * 如果当前元素的下一个元素是文本节点 就可以直接用nextText()这个方法来得到文本节点的内容  
  68.                              */  
  69.                             person.setName(xmlpull.nextText());   
  70.                         }else if ("age".equals(xmlpull.getName()))   
  71.                         {   
  72.                             /**  
  73.                              * 如果当前元素的下一个元素是文本节点 就可以直接用nextText()这个方法来得到文本节点的内容  
  74.                              */  
  75.                             person.setAge(xmlpull.nextText());   
  76.                         }   
  77.                     }   
  78.                     break;   
  79.                 }   
  80.                        
  81.                 case XmlPullParser.END_TAG:   
  82.                 {    
  83.                     if("person".equals(xmlpull.getName())&&person!=null)   
  84.                     {   
  85.                         personList.add(person);   
  86.                         person = null;   
  87.                     }   
  88.                     break;   
  89.                 }   
  90.             }   
  91.                
  92.             eventCode = xmlpull.next();//没有结束xml文件就推到下个进行解析   
  93.                
  94.                
  95.         }   
  96.            
  97.         return personList;   
  98.     }   
  99. }  

<!--EndFragment-->

 

利用pull创建xml文件

public static void writeXml(List<Person> persons, Writer writer) throws Exception{
  XmlSerializer serializer = Xml.newSerializer();
  serializer.setOutput(writer);
  serializer.startDocument("UTF-8", true);//<?xml version="1.0" encoding="UTF-8"?>
  serializer.startTag(null, "persons");
  for(Person person : persons){
   serializer.startTag(null, "person");   
   serializer.attribute(null, "id", String.valueOf(person.getId()));
   
   serializer.startTag(null, "name");
   serializer.text(person.getName());
   serializer.endTag(null, "name");
   
   serializer.startTag(null, "age");
   serializer.text(String.valueOf(person.getAge()));
   serializer.endTag(null, "age"); 
   
   serializer.endTag(null, "person");
  }
  serializer.endTag(null, "persons");
  serializer.endDocument();
  writer.flush();
  writer.close();  
 }

 

 

写入xml文件测试

StringWriter writer = new StringWriter();
  List<Person> persons = new ArrayList<Person>();
  persons.add(new Person(12, "李明", new Short((short)36)));
  persons.add(new Person(78, "老张", new Short((short)26)));
  persons.add(new Person(90, "老毕", new Short((short)16)));
  PullPersonService.writeXml(persons, writer);
  Log.i(TAG, writer.toString());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值