xml解析-续-之Pull

/**
 * 采用pull解析xml内容
 * 建议平时使用pull 解析器解析xml 文档,容易理解

 * @author Administrator
 *
 */

 

/**
  * 获取员工信息
  * @param xmlInputStream
  * @return
  * @throws Exception
  */
 public static List<Person> getPerson(InputStream xmlInputStream)throws Exception{
  List<Person> persoList =null;
  Person person =null;

 XmlPullParser parser= Xml.newPullParser();   

 

 parser.setInput(xmlInputStream,"UTF-8"); //设置,解析

  setInput(xml,encoding);
  int event = parser.getEventType(); //将会解析xml 文件第一段字符
  //pull解析器不能主动的自我解析,需要手动调用next()解析方法,进行解析
  while (event!= XmlPullParser.END_DOCUMENT) { //如果不是文档末尾,就一直进行解析(不是结束文档事件)
   switch (event) {
   case XmlPullParser.START_DOCUMENT: //开始文档事件
    persoList = new ArrayList<Person>();
    break;
   case XmlPullParser.START_TAG: //开始元素事件处理
    if ("person".equals(parser.getName())) {
     //get attribute
     int id= new Integer(parser.getAttributeValue(0));
     person =new Person();
     person.setId(id);
    }
    if (person!=null) {
     if ("name".equals(parser.getName())) {
      //get attribute
      person.setName(parser.nextText()); //获取开始节点下面的文本节点的值
     }
     if ("age".equals(parser.getName())) {
      //get attribute
      int age= new Integer(parser.nextText());
      person.setAge(age);
     }
    }
    
    break;
   case XmlPullParser.END_TAG: //结束元素事件
    if ("person".equals(parser.getName())) {
     persoList.add(person);
     person = null;
    }
    break;
    
   }
   event =parser.next();  //调用next方法,进行下一步
  }
  return persoList;
 }

 

 

/**
  * 生成xml
  * @param list
  * @param outputStream
  * @throws Exception
  */
 public static void save(List<Person> list,OutputStream outputStream)throws Exception{
  XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
  XmlSerializer serializer = factory.newSerializer();//获取序列化对象
  serializer.setOutput(outputStream,"utf-8"); //设置输出方向
  serializer.startDocument("utf-8",true); //设置xml 文件的编码,和xml文件是否可以独立存在
  serializer.startTag(null,"persons"); //设置开始标签(命名空间设置为null,persons)
  for(Person person: list){
   serializer.startTag(null,"person"); //kaishi 设置,开始生成person 节点
    serializer.attribute(null,"id",person.getId()+""); //设置节点属性
    //设置子节点
    serializer.startTag(null,"name");
    serializer.text(person.getName());
    serializer.endTag(null,"name");
    //设置子节点
    serializer.startTag(null,"age");
    serializer.text(person.getAge()+"");
    serializer.endTag(null,"age");
   
   serializer.endTag(null,"person");
  }
  
  serializer.endTag(null,"persons");//设置结束标签又开始就有结束嘛
  serializer.endDocument(); //结束文档
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值