zoukankan      html  css  js  c++  java
  • XML的解析和序列化

      1 public class Test extends TestCase {
      2 
      3     public void test() throws IllegalStateException, RuntimeException, IOException {
      4         writeXMLTOLocal();
      5         
      6         List<Person> personList = parserXmlFromLocal();
      7         
      8         for (Person person : personList) {
      9             Log.i("TestCase", person.toString());
     10         }
     11     }
     12 
     13     public void writeXMLTOLocal() throws RuntimeException,
     14             IllegalStateException, IOException {
     15         List<Person> personlist = getPersondList();
     16         // 获得序列化对象
     17         XmlSerializer serializer = Xml.newSerializer();
     18 
     19         File path = new File(Environment.getExternalStorageDirectory(),
     20                 "person.xml");
     21         FileOutputStream fos;
     22         try {
     23             fos = new FileOutputStream(path);
     24             serializer.setOutput(fos, "utf-8");
     25 
     26             serializer.startDocument("utf-8", true);
     27             serializer.startTag(null, "persons");
     28 
     29             for (Person person : personlist) {
     30                 serializer.startTag(null, "person");
     31                 serializer.attribute(null, "id", String.valueOf(person.getId()));
     32 
     33                 serializer.startTag(null, "name");
     34                 serializer.text(person.getName());
     35                 serializer.endTag(null, "name");
     36 
     37                 // 写年龄
     38                 serializer.startTag(null, "age"); // <age>
     39                 serializer.text(String.valueOf(person.getAge()));
     40                 serializer.endTag(null, "age"); // </age>
     41 
     42                 serializer.endTag(null, "person"); // </person>
     43             }
     44 
     45             serializer.endTag(null, "persons"); // </persons>
     46 
     47             serializer.endDocument(); // 结束
     48         } catch (FileNotFoundException e) {
     49             // TODO Auto-generated catch block
     50             e.printStackTrace();
     51         }
     52 
     53     }
     54     
     55     private List<Person> parserXmlFromLocal() {
     56         try {
     57             File path = new File(Environment.getExternalStorageDirectory(), "person.xml");
     58             FileInputStream fis = new FileInputStream(path);
     59             
     60             // 获得pull解析器对象
     61             XmlPullParser parser = Xml.newPullParser();
     62             // 指定解析的文件和编码格式
     63             parser.setInput(fis, "utf-8");
     64             
     65             int eventType = parser.getEventType();         // 获得事件类型
     66             
     67             List<Person> personList = null;
     68             Person person = null;
     69             String id;
     70             while(eventType != XmlPullParser.END_DOCUMENT) {
     71                 String tagName = parser.getName();    // 获得当前节点的名称
     72                 
     73                 switch (eventType) {
     74                 case XmlPullParser.START_TAG:         // 当前等于开始节点  <person>
     75                     if("persons".equals(tagName)) {    // <persons>
     76                         personList = new ArrayList<Person>();
     77                     } else if("person".equals(tagName)) { // <person id="1">
     78                         person = new Person();
     79                         id = parser.getAttributeValue(null, "id");
     80                         person.setId(Integer.valueOf(id));
     81                     } else if("name".equals(tagName)) { // <name>
     82                         person.setName(parser.nextText());
     83                     } else if("age".equals(tagName)) { // <age>
     84                         person.setAge(Integer.parseInt(parser.nextText()));
     85                     }
     86                     break;
     87                 case XmlPullParser.END_TAG:        // </persons>
     88                     if("person".equals(tagName)) {
     89                         // 需要把上面设置好值的person对象添加到集合中
     90                         personList.add(person);
     91                     }
     92                     break;
     93                 default:
     94                     break;
     95                 }
     96                 
     97                 eventType = parser.next();        // 获得下一个事件类型
     98             }
     99             return personList;
    100         } catch (Exception e) {
    101             e.printStackTrace();
    102         }
    103         return null;
    104     }
    105     private List<Person> getPersondList() {
    106         List<Person> personlist = new ArrayList<Person>();
    107         for (int i = 0; i < 30; i++) {
    108             personlist.add(new Person(i, "wang" + i, 18 + i));
    109         }
    110 
    111         return personlist;
    112     }
    113 
    114 }
  • 相关阅读:
    Study Plan The FortyEighth Day
    原码与补码
    【innoDB】加锁案例分析
    【InnoDB】事务基础知识
    了解 CAP
    妙用位运算
    Go学习笔记
    .NET Hot Reload热重载
    .NET 6 中的 dotnet monitor
    C# 实现多线程的同步方法详解
  • 原文地址:https://www.cnblogs.com/xiaoying1245970347/p/4429142.html
Copyright © 2011-2022 走看看