PULL解析XML文件

PULL解析XML文件的步骤:

1,  导包
 2,  创建pull解析器工厂
 3,  创建解析器对象
 4,  设置解析的数据源(要解析的内容)
 5,   获取事件的类型(int)  
 6,  循环解析, 直到文档解析完成

解析实例:

XML文件:

[html] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <students>  
  3.     <student >  
  4.         <id>1</id>  
  5.         <name>zhangsan</name>  
  6.         <age>20</age>  
  7.         <sex>male</sex>  
  8.     </student>  
  9.     <student >  
  10.         <id>2</id>  
  11.         <name>lisi</name>  
  12.         <age>21</age>  
  13.         <sex>female</sex>  
  14.     </student>  
  15. </students>  

Student类:

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. public class Student {  
  2.   
  3.     private int id;  
  4.     private String name;  
  5.     private String age;  
  6.     private String sex;  
  7.     public int getId() {  
  8.         return id;  
  9.     }  
  10.   
  11.     public void setId(int id) {  
  12.         this.id = id;  
  13.     }  
  14.   
  15.     public String getName() {  
  16.         return name;  
  17.     }  
  18.   
  19.     public void setName(String name) {  
  20.         this.name = name;  
  21.     }  
  22.   
  23.     public String getAge() {  
  24.         return age;  
  25.     }  
  26.   
  27.     public void setAge(String age) {  
  28.         this.age = age;  
  29.     }  
  30.   
  31.     public String getSex() {  
  32.         return sex;  
  33.     }  
  34.   
  35.     public void setSex(String sex) {  
  36.         this.sex = sex;  
  37.     }  
  38.     public String toString() {  
  39.         return "Student [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + "]";  
  40.     }  
  41.   
  42. }  

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. public static void main(String[] args) throws XmlPullParserException, IOException {  
  2.           
  3.         //1, 导包  
  4.         //2, 得到Pull解析器工厂  
  5.         XmlPullParserFactory  factory = XmlPullParserFactory.newInstance();  
  6.           
  7.         //3, 得到Pull解析器  
  8.         XmlPullParser parser = factory.newPullParser();  
  9.           
  10.         //4, 指定要解析的文件  
  11.         parser.setInput(new FileReader("XML文件路径"));  
  12.           
  13.         //5, 获取事件的状态类型  
  14.         int type = parser.getEventType();  
  15.           
  16.         //获取当前解析标签的名称  
  17.         String tag = null;  
  18.           
  19.         //数据集合  
  20.         ArrayList<Student> list = null;  
  21.           
  22.         //当前"组装"数据的对象  
  23.         Student student = null;  
  24.           
  25.         //6, 循环解析, 直到文档结束  
  26.         while (type!=XmlPullParser.END_DOCUMENT) {  
  27.               
  28.             //获取标签名称  
  29.             tag = parser.getName();  
  30.               
  31.             switch(type)  
  32.             {  
  33.             case XmlPullParser.START_DOCUMENT://文档的开始  
  34.                   
  35.                 list = new ArrayList<>();  
  36.                   
  37.                 break;  
  38.                   
  39.             case XmlPullParser.START_TAG://标签的开始   
  40.                   
  41.                 if("student".equals(tag))  
  42.                 {  
  43.                     student = new Student();  
  44.                 }  
  45.                 else if("id".equals(tag))  
  46.                 {  
  47.                     String str = parser.nextText();  
  48.                       
  49.                     student.setId(Integer.parseInt(str));  
  50.                 }else if("name".equals(tag))  
  51.                 {  
  52.                     String str = parser.nextText();  
  53.                       
  54.                     student.setName(str);  
  55.                 }else if("age".equals(tag))  
  56.                 {  
  57.                     String str  = parser.nextText();  
  58.                       
  59.                     student.setAge(str);  
  60.                 }else if("sex".equals(tag))  
  61.                 {  
  62.                     String str = parser.nextText();  
  63.                       
  64.                     student.setSex(str);  
  65.                 }  
  66.                   
  67.                 break;  
  68.                   
  69.             case XmlPullParser.END_TAG:  
  70.                 if("student".equals(tag))//</students>  
  71.                 {  
  72.                     list.add(student);  
  73.                 }  
  74.                 break;  
  75.             }  
  76.             //获取下一个事件的类型, 不写就死循环了!!  一定要写的  
  77.             type = parser.next();  
  78.         }  
  79.           
  80.         for(Student s:list)  
  81.         {  
  82.             System.out.println(s);  
  83.         }  
  84.     }  
  85.   
  86. }  

但是XML文件:

[html] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <students>  
  3.     <student id="1">  
  4.         <name>zhangsan</name>  
  5.         <age>20</age>  
  6.         <sex>male</sex>  
  7.     </student>  
  8.     <student id="2">  
  9.         <name>lisi</name>  
  10.         <age>21</age>  
  11.         <sex>female</sex>  
  12.     </student>  
  13. </students>  

修改为:

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. public class DemoPull02 {  
  2.   
  3.     /** 
  4.      * @param args 
  5.      * @throws XmlPullParserException  
  6.      * @throws IOException  
  7.      */  
  8.     public static void main(String[] args) throws XmlPullParserException, IOException {  
  9.         // 解析器工厂  
  10.         XmlPullParserFactory factory = XmlPullParserFactory.newInstance();  
  11.         //解析器  
  12.         XmlPullParser parser = factory.newPullParser();  
  13.         //设置数据源  
  14.         parser.setInput(new FileReader("XML文件路径"));  
  15.         //获取事件的类型  
  16.         int type = parser.getEventType();  
  17.           
  18.         String tag = null;  
  19.         ArrayList<Student> list = null;  
  20.         Student student = null;  
  21.           
  22.         //循环解析, 直到文档结束  
  23.         while (type!=XmlPullParser.END_DOCUMENT) {//值为: 1  
  24.               
  25.             tag = parser.getName();  
  26.               
  27.             switch (type) {  
  28.             case XmlPullParser.START_DOCUMENT://值为: 0  
  29.                   
  30.                 list = new ArrayList<>();  
  31.                   
  32.                 break;  
  33.   
  34.             case XmlPullParser.START_TAG://值为: 2  
  35.                   
  36.                 if("student".equals(tag))  
  37.                 {  
  38.                     //实例化student  
  39.                     student = new Student();  
  40.                       
  41.                     //获取属性  
  42.                     int count  = parser.getAttributeCount();  
  43.                       
  44.                     for(int i=0;i<count;i++)  
  45.                     {  
  46.                         String attName = parser.getAttributeName(i);  
  47.                           
  48.                         String attValue = parser.getAttributeValue(i);  
  49.                           
  50.                         if("id".equals(attName))//如果属性名称为id   , 那么需要在student中设置id  
  51.                         {  
  52.                             student.setId(Integer.parseInt(attValue));  
  53.                         }  
  54.                     }  
  55.                       
  56.                     //如果确定只要一个id  
  57.                 //  student.setId(Integer.parseInt(parser.getAttributeValue(0)));  
  58.                       
  59.                       
  60.                 }else if("name".equals(tag))  
  61.                 {  
  62.                     String str = parser.nextText();  
  63.                       
  64.                     student.setName(str);  
  65.                 }else if("age".equals(tag))  
  66.                 {  
  67.                     String str = parser.nextText();  
  68.                       
  69.                     student.setAge(str);  
  70.                 }else if("sex".equals(tag))  
  71.                 {  
  72.                     String str = parser.nextText();  
  73.                       
  74.                     student.setSex(str);  
  75.                 }  
  76.                   
  77.                 break;  
  78.                   
  79.             case XmlPullParser.END_TAG://值为: 3  
  80.                   
  81.                 if("student".equals(tag))  
  82.                 {  
  83.                     list.add(student);  
  84.                 }  
  85.                   
  86.                 break;  
  87.             }  
  88.               
  89.               
  90.             //获取下一个事件, 防止死循环  
  91.             type = parser.next();  
  92.               
  93.         }  
  94.           
  95.         for(Student s:list)  
  96.         {  
  97.             System.out.println(s);  
  98.         }  
  99.     }  
  100.   
  101. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PULL解析是一种基于事件驱动的解析方式,它逐行读取XML文档并触发事件,开发人员可以根据需要处理这些事件。相比于DOM解析方式,PULL解析方式更加轻量级和高效,适用于处理大型XML文件。 以下是使用PULL解析方式解析XML文件的基本步骤: 1. 创建一个XmlPullParser实例,该实例可以从一个输入流中读取XML文档。例如,可以使用以下代码创建一个XmlPullParser实例: ```java XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); parser.setInput(inputStream, null); ``` 2. 通过解析器读取XML文档中的每个元素,并在需要的时候处理它们。例如,可以使用以下代码循环读取XML文档中的每个元素: ```java int eventType = parser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { if (eventType == XmlPullParser.START_TAG) { // 开始标签 String tagName = parser.getName(); if (tagName.equals("book")) { // 处理book元素 String bookName = parser.getAttributeValue(null, "name"); } } else if (eventType == XmlPullParser.END_TAG) { // 结束标签 } else if (eventType == XmlPullParser.TEXT) { // 元素内容 String text = parser.getText(); } eventType = parser.next(); } ``` 3. 根据需要处理每个元素。例如,可以使用上面的代码来处理book元素并获取它的name属性。 注意:在处理XML文档时,可能会遇到异常情况,例如XML语法错误或无法打开输入流。因此,开发人员需要在代码中捕获这些异常并进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值