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>例1. 创建了Person类。
解析以上person.xml
PULL解析:基于事件拉取
5个属性:每一个事件对应一个常量
START_DOCUMENT:开始文档 常量值 0
START_TAG:开始标签 2
TEXT: 文本 常量值 4
END_TAG: 结束标签 3
END_DOCUMENT: 结束文档 1
非常重要的方法:
next():检索下一个事件
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 }