• android 通过pull解析xml文件


      1 package com.example.xmldemo.test;
      2 
      3 import java.io.File;
      4 import java.io.FileInputStream;
      5 import java.io.FileNotFoundException;
      6 import java.io.FileOutputStream;
      7 import java.io.IOException;
      8 import java.io.InputStreamReader;
      9 import java.util.ArrayList;
     10 import java.util.List;
     11 
     12 import org.xmlpull.v1.XmlPullParser;
     13 import org.xmlpull.v1.XmlSerializer;
     14 
     15 import com.example.xmldemo.Person;
     16 
     17 import android.os.Environment;
     18 import android.test.AndroidTestCase;
     19 import android.util.Log;
     20 import android.util.Xml;
     21 
     22 public class XmlTest extends AndroidTestCase
     23 {    
     24     public void test()
     25     {
     26         writeLocal();
     27         
     28         List<Person> personList = parseXml();
     29         for(Person person : personList)
     30         {
     31             Log.i("XmlTest", person.toString());
     32         }
     33     }
     34     /**
     35      * 写xml文件大本地
     36      */
     37     public void writeLocal()
     38     {
     39         List<Person> personList = getPersonList();
     40         //获得序列化对象
     41         XmlSerializer serializer = Xml.newSerializer();
     42         // 
     43         try
     44         {
     45             //创建文件流对象
     46             File file = new File("data/data/com.example.xmldemo", "persons.xml");
     47             FileOutputStream fos = new FileOutputStream(file);
     48             //设置文件的输出流
     49             serializer.setOutput(fos, "UTF-8");
     50             serializer.startDocument("utf-8", true); //<?xml version
     51             serializer.startTag(null, "persons"); //<persons>
     52             for(Person person : personList)
     53             {
     54                 serializer.startTag(null, "person"); //<person>
     55                 serializer.attribute(null, "id", String.valueOf(person.getId()));
     56                 serializer.startTag(null, "name"); //<name>
     57                 serializer.text(person.getName()); // kite1
     58                 serializer.endTag(null, "name"); //</name>
     59                 serializer.startTag(null, "age"); //<age>
     60                 serializer.text(String.valueOf(person.getAge()));
     61                 serializer.endTag(null, "age");//</age>
     62                 serializer.endTag(null, "person"); //<person>
     63             }
     64             serializer.endTag(null, "persons"); //</persons>
     65             serializer.endDocument();
     66             serializer.flush();
     67             fos.flush();
     68             fos.close();
     69         } catch (Exception e)
     70         {
     71             e.printStackTrace();
     72         }
     73         
     74     }
     75     /**
     76      * 获得personList
     77      * @return
     78      */
     79     public List<Person> getPersonList()
     80     {
     81         List<Person> personList = new ArrayList<Person>();
     82         for(int i = 0; i < 30; i++)
     83         {
     84             Person person = new Person(i, "kite" + 1,18 + i);
     85             personList.add(person);
     86         }
     87         return personList;
     88     }
     89     
     90     public List<Person> parseXml()
     91     {
     92     
     93         try
     94         {
     95             //创建文件流对象
     96             File file = new File("data/data/com.example.xmldemo", "persons.xml");
     97             FileInputStream fis = new FileInputStream(file);
     98             //获得pull 解析对象
     99             XmlPullParser parser = Xml.newPullParser();
    100             // 指定解析的文件和编码格式
    101             parser.setInput(fis,"utf-8");
    102             int eventType = parser.getEventType(); //获得事件的类型
    103             
    104             //初始化集合
    105             List<Person> personList = null;
    106             Person person = null;
    107             //如果不是最后的endDocument
    108             while(eventType != XmlPullParser.END_DOCUMENT)
    109             {
    110                 String tagName = parser.getName();
    111                 switch (eventType)
    112                 {
    113                 case XmlPullParser.START_TAG:
    114                         //如果是最开始的persons 根节点初始化
    115                         if("persons".equals(tagName))
    116                         {
    117                             personList = new ArrayList<Person>();
    118                         } else if("person".equals(tagName))
    119                         {
    120                             //初始化person对象
    121                             person = new Person();
    122                             
    123                             //获得id
    124                             String id =  parser.getAttributeValue(null, "id");
    125                             person.setId(Integer.parseInt(id));
    126                         } else if("name".equals(tagName))
    127                         {
    128                             person.setName(parser.nextText());
    129                         } else if("age".equals(tagName))
    130                         {
    131                             person.setAge(Integer.parseInt(parser.nextText()));
    132                         }
    133                     break;
    134                 case XmlPullParser.END_TAG:
    135                     //如果是结束标记
    136                     if("person".equals(tagName))
    137                     {
    138                         // 需要把上面设置好值的person对象添加到集合中
    139                         personList.add(person);
    140                     } 
    141                     break;
    142                 default:    
    143                     break;
    144                 }
    145                 //获得下一个事件
    146                 eventType = parser.next();
    147             }
    148             return personList;
    149         } catch (Exception e)
    150         {
    151             // TODO Auto-generated catch block
    152             e.printStackTrace();
    153         }
    154         return null;
    155     }
    156     
    157 }
    View Code
  • 相关阅读:
    JavaScript如何获取一个元素的样式信息
    Linux服务器命令行操作(小白专用)
    Linux云服务器搭建node环境
    C++ new和delete运算符简介
    C++中free()与delete的区别
    VS2017+Qt开发时打开命令调试窗口
    opencv4.2版本遇到CV_MINMAX未声明标识符
    CUDA 数据传输
    uchar 存为8位/16位图像(QImage)
    Qt Creator删除toolbar中多余的“分隔符”
  • 原文地址:https://www.cnblogs.com/kite/p/3924571.html
Copyright © 2020-2023  润新知