溫馨提示:您的每一次轉載,體現了我寫此文的意義!!!煩請您在轉載時注明出處http://www.aygfsteel.com/sxyx2008/謝謝合作!!!

          雪山飛鵠

          溫馨提示:您的每一次轉載,體現了我寫此文的意義!!!煩請您在轉載時注明出處http://www.aygfsteel.com/sxyx2008/謝謝合作!!!

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            215 Posts :: 1 Stories :: 674 Comments :: 0 Trackbacks
                  在上文中介紹了使用sax方式解析xml,這里介紹下在Android中極力推薦的xmlpull方式解析xml。xmlpull不僅僅可以使用在Android上,同樣也適用于javase,但在javase環境下,你需要自己去獲取xmlpull所依賴的類庫。
                  環境:        

              kxml2-2.3.0.jar

              xmlpull_1_1_3_4c.jar

          以上兩個jar分別從以下網站下載:

          http://www.xmlpull.org/    xmlpull

          http://kxml.sourceforge.net/    kxml

          xml文件:

          <?xml version="1.0" encoding="UTF-8"?>
          <root>
              
          <student id="1" group="1">
                  
          <name>張三</name>
                  
          <sex></sex>
                  
          <age>18</age>
                  
          <email>zhangsan@163.com</email>
                  
          <birthday>1987-06-08</birthday>
                  
          <memo>好學生</memo>
              
          </student>
              
          <student id="2" group="2">
                  
          <name>李四</name>
                  
          <sex></sex>
                  
          <age>18</age>
                  
          <email>lisi@163.com</email>
                  
          <birthday>1987-06-08</birthday>
                  
          <memo>好學生</memo>
              
          </student>
              
          <student id="3" group="3">
                  
          <name>小王</name>
                  
          <sex></sex>
                  
          <age>18</age>
                  
          <email>xiaowang@163.com</email>
                  
          <birthday>1987-06-08</birthday>
                  
          <memo>好學生</memo>
              
          </student>
              
          <student id="4" group="4">
                  
          <name>小張</name>
                  
          <sex></sex>
                  
          <age>18</age>
                  
          <email>xiaozhang@163.com</email>
                  
          <birthday>1987-06-08</birthday>
                  
          <memo>好學生</memo>
              
          </student>
              
          <student id="5" group="5">
                  
          <name>小明</name>
                  
          <sex></sex>
                  
          <age>18</age>
                  
          <email>xiaoming@163.com</email>
                  
          <birthday>1987-06-08</birthday>
                  
          <memo>好學生</memo>
              
          </student>
          </root>

          Xml對應的實體bean文件:

          package com.parsexml.entity;

          public class Student {
              
              
          private int id;
              
          private int group;
              
          private String name;
              
          private String sex;
              
          private int age;
              
          private String email;
              
          private String memo;
              
          private String birthday;
              
          public int getId() {
                  
          return id;
              }
              
          public void setId(int id) {
                  
          this.id = id;
              }
              
          public int getGroup() {
                  
          return group;
              }
              
          public void setGroup(int group) {
                  
          this.group = group;
              }
              
          public String getName() {
                  
          return name;
              }
              
          public void setName(String name) {
                  
          this.name = name;
              }
              
          public String getSex() {
                  
          return sex;
              }
              
          public void setSex(String sex) {
                  
          this.sex = sex;
              }
              
          public int getAge() {
                  
          return age;
              }
              
          public void setAge(int age) {
                  
          this.age = age;
              }
              
          public String getEmail() {
                  
          return email;
              }
              
          public void setEmail(String email) {
                  
          this.email = email;
              }
              
          public String getMemo() {
                  
          return memo;
              }
              
          public void setMemo(String memo) {
                  
          this.memo = memo;
              }
              
          public String getBirthday() {
                  
          return birthday;
              }
              
          public void setBirthday(String birthday) {
                  
          this.birthday = birthday;
              }
              
          }

          Pull解析代碼

          package com.parsexml;

          import java.io.IOException;
          import java.util.ArrayList;
          import java.util.List;

          import org.xmlpull.v1.XmlPullParser;
          import org.xmlpull.v1.XmlPullParserException;
          import org.xmlpull.v1.XmlPullParserFactory;

          import com.parsexml.entity.Student;

          public class PullParseXml {
              
              
              
          public List<Student> PullParseXML(){
                  
                  List
          <Student> list=null;
                  Student student 
          = null;
                  
                  
          //構建XmlPullParserFactory
                  try {
                      XmlPullParserFactory pullParserFactory
          =XmlPullParserFactory.newInstance();
                      
          //獲取XmlPullParser的實例
                      XmlPullParser xmlPullParser=pullParserFactory.newPullParser();
                      
          //設置輸入流  xml文件
                      xmlPullParser.setInput(Thread.currentThread().getContextClassLoader().getResourceAsStream("Student.xml"), "UTF-8");
                      
                      
          //開始
                      int eventType=xmlPullParser.getEventType();
                      
                      
          try {
                          
          while(eventType!=XmlPullParser.END_DOCUMENT){
                              String nodeName
          =xmlPullParser.getName();
                              
          switch (eventType) {
                              
          //文檔開始
                              case XmlPullParser.START_DOCUMENT:
                                  list
          =new ArrayList<Student>();
                                  
          break;
                              
          //開始節點
                              case XmlPullParser.START_TAG:
                                  
          //判斷如果其實節點為student
                                  if("student".equals(nodeName)){
                                      
          //實例化student對象
                                      student=new Student();
                                      
          //設置Id屬性
                                      student.setId(Integer.parseInt(xmlPullParser.getAttributeValue(0)));
                                      
          //設置Group屬性
                                      student.setGroup(Integer.parseInt(xmlPullParser.getAttributeValue(1)));
                                  }
          else if("name".equals(nodeName)){
                                      
          //設置name
                                      student.setName(xmlPullParser.nextText());
                                  }
          else if("sex".equals(nodeName)){
                                      
          //設置sex
                                      student.setSex(xmlPullParser.nextText());
                                  }
          else if("age".equals(nodeName)){
                                      
          //設置age
                                      student.setAge(Integer.parseInt(xmlPullParser.nextText()));
                                  }
          else if("email".equals(nodeName)){
                                      
          //設置email
                                      student.setEmail(xmlPullParser.nextText());
                                  }
          else if("birthday".equals(nodeName)){
                                      
          //設置birthday
                                      student.setBirthday(xmlPullParser.nextText());
                                  }
          else if("memo".equals(nodeName)){
                                      
          //設置memo屬性
                                      student.setMemo(xmlPullParser.nextText());
                                  }
                                  
          break;
                              
          //結束節點
                              case XmlPullParser.END_TAG:
                                  
          if("student".equals(nodeName)){
                                      list.add(student);
                                      student
          =null;
                                  }
                                  
          break;
                              
          default:
                                  
          break;
                              }
                              eventType
          =xmlPullParser.next();
                          }
                      } 
          catch (NumberFormatException e) {
                          e.printStackTrace();
                      } 
          catch (IOException e) {
                          e.printStackTrace();
                      }
                  } 
          catch (XmlPullParserException e) {
                      e.printStackTrace();
                  }

                  
          return list;
              }
              
              
          public static void main(String[] args) {
                  List
          <Student> list=new PullParseXml().PullParseXML();
                  
          for(Student student:list){
                      System.out.println(
          "id:"+student.getId()+"\tgroup:"+student.getGroup()+"\tname:"+student.getName()+"\tsex:"+student.getSex()+"\tage:"+student.getAge()+"\temail:"+student.getEmail()+"\tbirthday:"+student.getBirthday()+"\tmemo:"+student.getMemo());
                  }
              }
              
          }
           

          注:若工程中缺少kxml2-2.3.0.jar文件則會報以下異常信息:



           

          你應該添加kxml2-2.3.0.jar包到你的classpath 

          效果圖:

          點我下載demo


          posted on 2010-08-04 08:12 雪山飛鵠 閱讀(23917) 評論(6)  編輯  收藏 所屬分類: javase

          Feedback

          # re: 輕松使用xmlpull解析xml 2010-08-04 11:07 java小爬蟲
          你好,請問一下,你的代碼區的寬度很寬,這個是怎么設置的啊?我的很窄的。謝謝  回復  更多評論
            

          # re: 輕松使用xmlpull解析xml 2010-08-04 11:15 雪山飛鵠
          @java小爬蟲
          夠認真的么,我也不曉得,我粘上去就是這樣的,有可能跟blog模板的風格有關系吧  回復  更多評論
            

          # re: 輕松使用xmlpull解析xml 2010-08-17 17:31 游客
          說實在的,這個API看著夠難用的  回復  更多評論
            

          # re: 輕松使用xmlpull解析xml 2010-09-20 21:22 逍遙仙風
          查了這么多資料,中文的都是瞎轉載
          英文的又看不明白,博主的文章真是受用呀ToT  回復  更多評論
            

          # re: 輕松使用xmlpull解析xml[未登錄] 2014-06-10 10:01 jack
          很好,謝謝了!  回復  更多評論
            

          # re: 輕松使用xmlpull解析xml 2016-05-05 17:58 發斯蒂芬
          而發生的發生地方都是   回復  更多評論
            

          主站蜘蛛池模板: 五家渠市| 顺平县| 无棣县| 保德县| 松江区| 新疆| 关岭| 开阳县| 牟定县| 迁西县| 奇台县| 惠安县| 永安市| 无为县| 成安县| 八宿县| 伊吾县| 彭州市| 翁源县| 桐乡市| 宁晋县| 万山特区| 宁乡县| 长岛县| 同心县| 广宁县| 屯门区| 宜城市| 宜兰县| 广德县| 华蓥市| 舒兰市| 泗水县| 云南省| 东城区| 苏尼特右旗| 岑巩县| 旬邑县| 镇宁| 宁强县| 贵州省|