PULL解析XML文件的步骤:
1, 导包
2, 创建pull解析器工厂
3, 创建解析器对象
4, 设置解析的数据源(要解析的内容)
5, 获取事件的类型(int)
6, 循环解析, 直到文档解析完成
解析实例:
XML文件:
- <?xml version="1.0" encoding="UTF-8"?>
- <students>
- <student >
- <id>1</id>
- <name>zhangsan</name>
- <age>20</age>
- <sex>male</sex>
- </student>
- <student >
- <id>2</id>
- <name>lisi</name>
- <age>21</age>
- <sex>female</sex>
- </student>
- </students>
Student类:
- public class Student {
- private int id;
- private String name;
- private String age;
- private String sex;
- 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 String getAge() {
- return age;
- }
- public void setAge(String age) {
- this.age = age;
- }
- public String getSex() {
- return sex;
- }
- public void setSex(String sex) {
- this.sex = sex;
- }
- public String toString() {
- return "Student [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + "]";
- }
- }
- public static void main(String[] args) throws XmlPullParserException, IOException {
- //1, 导包
- //2, 得到Pull解析器工厂
- XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
- //3, 得到Pull解析器
- XmlPullParser parser = factory.newPullParser();
- //4, 指定要解析的文件
- parser.setInput(new FileReader("XML文件路径"));
- //5, 获取事件的状态类型
- int type = parser.getEventType();
- //获取当前解析标签的名称
- String tag = null;
- //数据集合
- ArrayList<Student> list = null;
- //当前"组装"数据的对象
- Student student = null;
- //6, 循环解析, 直到文档结束
- while (type!=XmlPullParser.END_DOCUMENT) {
- //获取标签名称
- tag = parser.getName();
- switch(type)
- {
- case XmlPullParser.START_DOCUMENT://文档的开始
- list = new ArrayList<>();
- break;
- case XmlPullParser.START_TAG://标签的开始
- if("student".equals(tag))
- {
- student = new Student();
- }
- else if("id".equals(tag))
- {
- String str = parser.nextText();
- student.setId(Integer.parseInt(str));
- }else if("name".equals(tag))
- {
- String str = parser.nextText();
- student.setName(str);
- }else if("age".equals(tag))
- {
- String str = parser.nextText();
- student.setAge(str);
- }else if("sex".equals(tag))
- {
- String str = parser.nextText();
- student.setSex(str);
- }
- break;
- case XmlPullParser.END_TAG:
- if("student".equals(tag))//</students>
- {
- list.add(student);
- }
- break;
- }
- //获取下一个事件的类型, 不写就死循环了!! 一定要写的
- type = parser.next();
- }
- for(Student s:list)
- {
- System.out.println(s);
- }
- }
- }
但是XML文件:
- <?xml version="1.0" encoding="UTF-8"?>
- <students>
- <student id="1">
- <name>zhangsan</name>
- <age>20</age>
- <sex>male</sex>
- </student>
- <student id="2">
- <name>lisi</name>
- <age>21</age>
- <sex>female</sex>
- </student>
- </students>
修改为:
- public class DemoPull02 {
- /**
- * @param args
- * @throws XmlPullParserException
- * @throws IOException
- */
- public static void main(String[] args) throws XmlPullParserException, IOException {
- // 解析器工厂
- XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
- //解析器
- XmlPullParser parser = factory.newPullParser();
- //设置数据源
- parser.setInput(new FileReader("XML文件路径"));
- //获取事件的类型
- int type = parser.getEventType();
- String tag = null;
- ArrayList<Student> list = null;
- Student student = null;
- //循环解析, 直到文档结束
- while (type!=XmlPullParser.END_DOCUMENT) {//值为: 1
- tag = parser.getName();
- switch (type) {
- case XmlPullParser.START_DOCUMENT://值为: 0
- list = new ArrayList<>();
- break;
- case XmlPullParser.START_TAG://值为: 2
- if("student".equals(tag))
- {
- //实例化student
- student = new Student();
- //获取属性
- int count = parser.getAttributeCount();
- for(int i=0;i<count;i++)
- {
- String attName = parser.getAttributeName(i);
- String attValue = parser.getAttributeValue(i);
- if("id".equals(attName))//如果属性名称为id , 那么需要在student中设置id
- {
- student.setId(Integer.parseInt(attValue));
- }
- }
- //如果确定只要一个id
- // student.setId(Integer.parseInt(parser.getAttributeValue(0)));
- }else if("name".equals(tag))
- {
- String str = parser.nextText();
- student.setName(str);
- }else if("age".equals(tag))
- {
- String str = parser.nextText();
- student.setAge(str);
- }else if("sex".equals(tag))
- {
- String str = parser.nextText();
- student.setSex(str);
- }
- break;
- case XmlPullParser.END_TAG://值为: 3
- if("student".equals(tag))
- {
- list.add(student);
- }
- break;
- }
- //获取下一个事件, 防止死循环
- type = parser.next();
- }
- for(Student s:list)
- {
- System.out.println(s);
- }
- }
- }