使用PULL解析XML文件

   XmlPull和Sax类似,是基于流(stream)操作文件,然后根据节点事件回调开发者编写的处理程序。因为是基于流的处理,因此Xmlpull和 Sax都比较节约内存资源,不会象Dom那样要把所有节点以对橡树的形式展现在内存中。 但Xmlpull比Sax更简明,而且不需要扫描完整个流。

     下面来看一个pull解析xml的例子:

      student.xml:

     

[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>    
  2.     <root>    
  3.         <student id="1" group="1">    
  4.             <name>张三</name>    
  5.             <sex></sex>    
  6.             <age>18</age>    
  7.             <email>zhangsan@163.com</email>    
  8.             <birthday>1987-06-08</birthday>    
  9.             <memo>好学生</memo>    
  10.         </student>    
  11.         <student id="2" group="2">    
  12.             <name>李四</name>    
  13.             <sex></sex>    
  14.             <age>18</age>    
  15.             <email>lisi@163.com</email>    
  16.             <birthday>1987-06-08</birthday>    
  17.             <memo>好学生</memo>    
  18.         </student>    
  19.         <student id="3" group="3">    
  20.             <name>小王</name>    
  21.             <sex></sex>    
  22.             <age>18</age>    
  23.             <email>xiaowang@163.com</email>    
  24.             <birthday>1987-06-08</birthday>    
  25.             <memo>好学生</memo>    
  26.         </student>    
  27.         <student id="4" group="4">    
  28.             <name>小张</name>    
  29.             <sex></sex>    
  30.             <age>18</age>    
  31.             <email>xiaozhang@163.com</email>    
  32.             <birthday>1987-06-08</birthday>    
  33.             <memo>好学生</memo>    
  34.         </student>    
  35.         <student id="5" group="5">    
  36.             <name>小明</name>    
  37.             <sex></sex>    
  38.             <age>18</age>    
  39.             <email>xiaoming@163.com</email>    
  40.             <birthday>1987-06-08</birthday>    
  41.             <memo>好学生</memo>    
  42.         </student>    
  43.     </root>    
       对应的bean:

    

[html]  view plain copy
  1. public class Student {    
  2.       
  3.     private int id;    
  4.     private int group;    
  5.     private String name;    
  6.     private String sex;    
  7.     private int age;    
  8.     private String email;    
  9.     private String memo;    
  10.     private String birthday;    
  11.     public int getId() {    
  12.         return id;    
  13.     }    
  14.     public void setId(int id) {    
  15.         this.id = id;    
  16.     }    
  17.     public int getGroup() {    
  18.         return group;    
  19.     }    
  20.     public void setGroup(int group) {    
  21.         this.group = group;    
  22.     }    
  23.     public String getName() {    
  24.         return name;    
  25.     }    
  26.     public void setName(String name) {    
  27.         this.name = name;    
  28.     }    
  29.     public String getSex() {    
  30.         return sex;    
  31.     }    
  32.     public void setSex(String sex) {    
  33.         this.sex = sex;    
  34.     }    
  35.     public int getAge() {    
  36.         return age;    
  37.     }    
  38.     public void setAge(int age) {    
  39.         this.age = age;    
  40.     }    
  41.     public String getEmail() {    
  42.         return email;    
  43.     }    
  44.     public void setEmail(String email) {    
  45.         this.email = email;    
  46.     }    
  47.     public String getMemo() {    
  48.         return memo;    
  49.     }    
  50.     public void setMemo(String memo) {    
  51.         this.memo = memo;    
  52.     }    
  53.     public String getBirthday() {    
  54.         return birthday;    
  55.     }    
  56.     public void setBirthday(String birthday) {    
  57.         this.birthday = birthday;    
  58.     }    
  59.         
  60. }    

    主要的解析和现实类:

  

[html]  view plain copy
  1. import java.io.InputStream;  
  2. import java.util.ArrayList;  
  3. import java.util.List;  
  4.   
  5. import org.xmlpull.v1.XmlPullParser;  
  6. import org.xmlpull.v1.XmlPullParserFactory;  
  7.   
  8. import android.app.Activity;  
  9. import android.os.Bundle;  
  10. import android.os.Handler;  
  11. import android.os.Message;  
  12. import android.view.ViewGroup.LayoutParams;  
  13. import android.widget.LinearLayout;  
  14.   
  15. import android.widget.TextView;  
  16.   
  17. public class PullActivity extends Activity implements Runnable{  
  18.   
  19.     private TextView pullTextView ;  
  20.     private LinearLayout layout;  
  21.     private Handler handler=new Handler(){  
  22.          public void handleMessage(android.os.Message msg) {  
  23.              List<Student> lists=(List<Student>) msg.obj;  
  24.              for(int i=0;i<lists.size();i++){  
  25.                  Student student=lists.get(i);  
  26.                  StringBuffer sb=new StringBuffer();  
  27.                  sb.append(student.getId()+"  ").append(student.getName()+"  ")  
  28.                  .append(student.getAge()+"  ").append(student.getSex()+" ").append(student.getBirthday()+"  ")  
  29.                  .append(student.getEmail()+"  ").append(student.getGroup()+"  ");  
  30.                  TextView txt=new TextView(getApplicationContext());  
  31.                  txt.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));  
  32.                  txt.setText(sb.toString());  
  33.                  layout.addView(txt);  
  34.              }  
  35.          };  
  36.     };  
  37.     @Override  
  38.     protected void onCreate(Bundle savedInstanceState) {  
  39.         // TODO Auto-generated method stub  
  40.         super.onCreate(savedInstanceState);  
  41.         setContentView(R.layout.pull);  
  42.           
  43.         pullTextView=(TextView) this.findViewById(R.id.pullTextView);  
  44.         layout=(LinearLayout) this.findViewById(R.id.layout);  
  45.         new Thread(this).start();  
  46.           
  47.            
  48.            
  49.     }  
  50.     //pull解析xml  
  51.     public List<Student> pullParseXml(){  
  52.         List<Student> lists=null;  
  53.         Student student=null;  
  54.           
  55.         try {  
  56.             XmlPullParserFactory factory=XmlPullParserFactory.newInstance();  
  57.             //获取XmlPullParser实例  
  58.             XmlPullParser pullParser=factory.newPullParser();  
  59.             InputStream in=this.getClass().getClassLoader().getResourceAsStream("student.xml");  
  60.             pullParser.setInput(in, "UTF-8");  
  61.             //开始  
  62.             int eventType=pullParser.getEventType();  
  63.               
  64.             while(eventType!=XmlPullParser.END_DOCUMENT){  
  65.                 String nodeName=pullParser.getName();  
  66.                 switch (eventType) {  
  67.                 //文档开始  
  68.                 case XmlPullParser.START_DOCUMENT:  
  69.                      lists=new ArrayList<Student>();  
  70.                     break;  
  71.   
  72.                     //开始节点  
  73.                 case XmlPullParser.START_TAG:  
  74.                     if("student".equals(nodeName)){  
  75.                         student=new Student();  
  76.                         student.setId(Integer.parseInt(pullParser.getAttributeValue(0)));  
  77.                         student.setGroup(Integer.parseInt(pullParser.getAttributeValue(1)));  
  78.                     }else if("name".equals(nodeName)){  
  79.                         student.setName(pullParser.nextText());  
  80.                     }else if("sex".equals(nodeName)){  
  81.                         student.setSex(pullParser.nextText());  
  82.                     }else if("age".equals(nodeName)){  
  83.                         student.setAge(Integer.parseInt(pullParser.nextText()));  
  84.                     }else if("email".equals(nodeName)){  
  85.                         student.setEmail(pullParser.nextText());  
  86.                     }else if("birthday".equals(nodeName)){  
  87.                         student.setBirthday(pullParser.nextText());  
  88.                     }else if("memo".equals(nodeName)){  
  89.                         student.setMemo(pullParser.nextText());  
  90.                     }  
  91.                     break;  
  92.                     //结束节点  
  93.                 case XmlPullParser.END_TAG:  
  94.                     if("student".equals(nodeName)){  
  95.                         lists.add(student);  
  96.                         student=null;  
  97.                     }  
  98.                     break;  
  99.                 default:  
  100.                     break;  
  101.                 }  
  102.                  // 手动的触发下一个事件    
  103.                 eventType=pullParser.next();  
  104.             }  
  105.         } catch (Exception e) {  
  106.             // TODO Auto-generated catch block  
  107.             e.printStackTrace();  
  108.         }  
  109.         return lists;  
  110.           
  111.     }  
  112.     @Override  
  113.     public void run() {  
  114.         // TODO Auto-generated method stub  
  115.         List<Student> lists=pullParseXml();  
  116.         Message msg=handler.obtainMessage();  
  117.         msg.obj=lists;  
  118.         handler.sendMessage(msg);  
  119.     }  
  120. }  

      注意xml中的<?xml version="1.0" encoding="utf-8"?>  这句话要顶格显示,不要留空隙,附则错了很难调试的。

     解析后效果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值