类似sax解析,但 sax解析一旦开始解析就是从头读到尾 ,不解析完整个文档不会停 pull解析较为灵活 是以时间为单位 手动向下继续 如果获得我们要找的结果 可以停止解析 基于事件驱动, 基本套路: 通过工厂实例 获取解析器 解析器可以判断头尾标签 可以判断标签名 可以获取属性或者内容 ------------------ xml文件: zhangsan 13 lisi 14 java类: import java.io.FileInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserFactory; public class PullTools { public static List PullTool(InputStream is) throws Exception { List list = new ArrayList<>(); Student stu = null; XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); parser.setInput(is, "utf-8"); for (int type = parser.getEventType(); type != XmlPullParser.END_DOCUMENT; type = parser.next()) { switch (type) { case XmlPullParser.START_TAG: switch (parser.getName()) { case "student": stu = new Student(); int id = Integer.parseInt(parser.getAttributeValue(0)); stu.setId(id); break; case "name": String name = parser.nextText(); stu.setName(name); break; case "age": int age = Integer.parseInt(parser.nextText()); stu.setAge(age); break; } break; case XmlPullParser.END_TAG: if ("student".equals(parser.getName())) { list.add(stu); } break; } } return list; } public static void main(String[] args) throws Exception { InputStream is = new FileInputStream("stu.xml"); List list = PullTools.PullTool(is); is.close(); System.out.println(list); } } public class Student { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", age=" + age + "]"; } }