Pull解析xml文件简单案例

    xiaoxiao2021-12-15  35

    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; } }

    转载请注明原文地址: https://ju.6miu.com/read-1000127.html

    最新回复(0)