Xml解析之PULL解析 例1

时间:2022-10-31 13:03:14
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <persons>
 3   <person id="1">   
 4     <name>zhangsan</name>
 5     <age>22</age>
 6     <sex>boy</sex>
 7   </person>
 8   <person id="2">
 9     <name>李四</name>
10     <age>20</age>
11     <sex></sex>
12   </person>
13 </persons>

解析以上person.xml

PULL解析:基于事件拉取
    5个属性:每一个事件对应一个常量
        START_DOCUMENT:开始文档 常量值 0
        START_TAG:开始标签  2
        TEXT:  文本  常量值 4
        END_TAG: 结束标签 3
        END_DOCUMENT: 结束文档 1
    非常重要的方法:
        next():检索下一个事件
  例1. 创建了Person类。
 
 
  1 import java.io.FileInputStream;
  2 import java.io.IOException;
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 
  6 import org.xmlpull.v1.XmlPullParser;
  7 import org.xmlpull.v1.XmlPullParserException;
  8 import org.xmlpull.v1.XmlPullParserFactory;
  9 
 10 public class Demo3 {
 11 
 12     public static void main(String[] args) throws XmlPullParserException,
 13             IOException {
 14         // 1、获取pull解析器的对象工厂
 15         XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
 16         // 2、从工厂对象中获取解析器
 17         XmlPullParser parser = factory.newPullParser();
 18         // 3、设置解析文档
 19         parser.setInput(new FileInputStream("src/person.xml"), "utf-8");
 20         // 4、开始解析
 21         List<Person> list = null;
 22         Person p = null;
 23         // 获取事件类型
 24         int type = parser.getEventType();
 25         while (type != XmlPullParser.END_DOCUMENT) {
 26             String tagName = parser.getName();
 27             switch (type) {
 28             case XmlPullParser.START_TAG:
 29                 if ("persons".equals(tagName)) {
 30                     // 如果开始标记是persons,应该创建集合
 31                     list = new ArrayList<Person>();
 32                 } else if ("person".equals(tagName)) {
 33                     // 如果开始标记是person,应该创建person对象
 34                     p = new Person();
 35                     if (parser.getAttributeCount() > 0) {
 36                         // 获取属性id的值,赋值给person对象的id属性
 37                         p.setId(parser.getAttributeValue(0));// 第一个属性
 38                     }
 39                 } else if ("name".equals(tagName)) {
 40                     p.setName(parser.nextText());
 41                 } else if ("age".equals(tagName)) {
 42                     p.setAge(Integer.parseInt(parser.nextText()));
 43                 } else if ("sex".equals(tagName)) {
 44                     p.setSex(parser.nextText());
 45                 }
 46                 break;
 47             case XmlPullParser.END_TAG:
 48                 if ("person".equals(tagName)) {
 49                     // </person> 将Person放入list集合
 50                     list.add(p);
 51                 }
 52                 break;
 53             }
 54             // 很重要的步骤:获取下次事件类型
 55             type = parser.next();
 56         }
 57         // 打印list
 58         for (Person per : list) {
 59             System.out.println(per);
 60         }
 61     }
 62 
 63     static class Person {
 64         private String id;
 65         private String name;
 66         private int age;
 67         private String sex;
 68 
 69         public Person() {
 70             super();
 71         }
 72 
 73         public Person(String id, String name, int age, String sex) {
 74             super();
 75             this.id = id;
 76             this.name = name;
 77             this.age = age;
 78             this.sex = sex;
 79         }
 80 
 81         public String getId() {
 82             return id;
 83         }
 84 
 85         public void setId(String str) {
 86             this.id = str;
 87         }
 88 
 89         public String getName() {
 90             return name;
 91         }
 92 
 93         public void setName(String name) {
 94             this.name = name;
 95         }
 96 
 97         public int getAge() {
 98             return age;
 99         }
100 
101         public void setAge(int age) {
102             this.age = age;
103         }
104 
105         public String getSex() {
106             return sex;
107         }
108 
109         public void setSex(String sex) {
110             this.sex = sex;
111         }
112 
113         @Override
114         public String toString() {
115             return "Person [id=" + id + ", name=" + name + ", age=" + age
116                     + ", sex=" + sex + "]";
117         }
118 
119     }
120 }