pull解析需要自行载入jar包,本文以解析一个student.xml文件为例
1、Pull,以事件常量的方法进行解析
2、解析之后存储数据
a:List<Student>
b:List<Map<String,Object>>
3、pull解析的事件常量
(XmlPullParser.START_DOCUMENT);//0 开始解析文档
(XmlPullParser.END_DOCUMENT);// 1 结束解析
(XmlPullParser.START_TAG);//2 开始该标签的解析
(XmlPullParser.END_TAG);// 3 结束该标签
1、标签不带属性
<?xml version="1.0" encoding="UTF-8"?> <class> <student> <id>1</id> <name>tom</name> <age>20</age> </student> <student> <id>2</id> <name>jack</name> <age>21</age> </student> <student> <id>3</id> <name>rose</name> <age>22</age></student> </class>
Student类
解析类
public class Demo01 { public static void main(String[] args) { System.out.println(getData()); } // 解析xml使用集合存储 public static List<Student> getData() { List<Student> list = null; Student stu = null; try { // 创建pull解析器工厂 XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); // 创建pull解析器 XmlPullParser parser = factory.newPullParser(); // 指定解析的文件 parser.setInput(new FileReader("student01.xml")); // pull解析的事件常量 // System.out.println(XmlPullParser.START_DOCUMENT);// 0 // System.out.println(XmlPullParser.END_DOCUMENT);// 1 // System.out.println(XmlPullParser.START_TAG);// 2 // System.out.println(XmlPullParser.END_TAG);// 3 // System.out.println(XmlPullParser.TEXT);// 4 // 获得事件类型 int type = parser.getEventType(); // 直到解析的事件为END_DOCUMENT,表示文档解析结束 while (type != XmlPullParser.END_DOCUMENT) {// 1 // 获得标签名 String tag = parser.getName(); switch (type) { case XmlPullParser.START_DOCUMENT:// 0 // 表示文档开始,创建集合 list = new ArrayList<>(); break; case XmlPullParser.START_TAG:// 2 // 判断标签名 if ("student".equals(tag)) { stu = new Student(); } if ("id".equals(tag)) { // 获得标签之间的值 String value = parser.nextText(); stu.setId(Integer.parseInt(value)); } if ("name".equals(tag)) { stu.setName(parser.nextText()); } if ("age".equals(tag)) { stu.setAge(Integer.parseInt(parser.nextText())); } break; case XmlPullParser.END_TAG:// 3 // 判断结束标签为student if ("student".equals(tag)) { list.add(stu); } break; } // 继续判断下一个事件类型****** // ****** type = parser.next(); } } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } }2、标签带属性
解析类代码
public class Demo03 { public static void main(String[] args) { System.out.println(getData()); } // 解析xml使用集合存储 public static List<Student> getData() { List<Student> list = null; Student stu = null; try { // 创建pull解析器工厂 XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); // 创建pull解析器 XmlPullParser parser = factory.newPullParser(); // 指定解析的文件 parser.setInput(new FileReader("student02.xml")); // 获得事件类型 int type = parser.getEventType(); // 直到解析的事件为END_DOCUMENT,表示文档解析结束 while (type != XmlPullParser.END_DOCUMENT) {// 1 // 获得标签名 String tag = parser.getName(); switch (type) { case XmlPullParser.START_DOCUMENT:// 0 // 表示文档开始,创建集合 list = new ArrayList<>(); break; case XmlPullParser.START_TAG:// 2 // 判断标签名 if ("student".equals(tag)) { stu = new Student(); // 获得student标签的属性 // 获得属性个数 int n = parser.getAttributeCount(); for (int i = 0; i < n; i++) { // 获得属性名和属性值 String name = parser.getAttributeName(i); String value = parser.getAttributeValue(i); if ("id".equals(name)) stu.setId(Integer.parseInt(value)); } } if ("name".equals(tag)) { stu.setName(parser.nextText()); } if ("age".equals(tag)) { stu.setAge(Integer.parseInt(parser.nextText())); } break; case XmlPullParser.END_TAG:// 3 // 判断结束标签为student if ("student".equals(tag)) { list.add(stu); } break; } // 继续判断下一个事件类型****** // ****** type = parser.next(); } } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } }