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

          雪山飛鵠

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

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            215 Posts :: 1 Stories :: 674 Comments :: 0 Trackbacks
                    sax方式解析xml的優點:
                    只要有jdk的存在,嚴格意義上來說是jre,它就可以運行,不依賴任何第三方的jar包。在移動設備上尤為廣泛使用。比如Android就使用它來解析xml。當然Android更為推薦的是采用xmlpull來解析xml。這種方式也同樣適合javase。我在后期會為大家準備使用xmlpull解析xml的demo。敬請關注。
                    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對應的Javabean:
          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;
              }
              
          }
              開始解析:
          package com.parsexml;

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

          import javax.xml.parsers.ParserConfigurationException;
          import javax.xml.parsers.SAXParser;
          import javax.xml.parsers.SAXParserFactory;

          import org.xml.sax.Attributes;
          import org.xml.sax.SAXException;
          import org.xml.sax.helpers.DefaultHandler;

          import com.parsexml.entity.Student;

          /**
           * 功能描述:采用sax方式解析XML<br>
           * 
           * 
          @author sxyx2008
           *
           
          */
          public class SaxParseXml extends DefaultHandler{

              
          //存放遍歷集合
              private List<Student> list;
              
          //構建Student對象
              private Student student;
              
          //用來存放每次遍歷后的元素名稱(節點名稱)
              private String tagName;
              
              
              
          public List<Student> getList() {
                  
          return list;
              }


              
          public void setList(List<Student> list) {
                  
          this.list = list;
              }


              
          public Student getStudent() {
                  
          return student;
              }


              
          public void setStudent(Student student) {
                  
          this.student = student;
              }


              
          public String getTagName() {
                  
          return tagName;
              }


              
          public void setTagName(String tagName) {
                  
          this.tagName = tagName;
              }


              
          //只調用一次  初始化list集合  
              @Override
              
          public void startDocument() throws SAXException {
                  list
          =new ArrayList<Student>();
              }
              
              
              
          //調用多次    開始解析
              @Override
              
          public void startElement(String uri, String localName, String qName,
                      Attributes attributes) 
          throws SAXException {
                  
          if(qName.equals("student")){
                      student
          =new Student();
                      
          //獲取student節點上的id屬性值
                      student.setId(Integer.parseInt(attributes.getValue(0)));
                      
          //獲取student節點上的group屬性值
                      student.setGroup(Integer.parseInt(attributes.getValue(1)));
                  }
                  
          this.tagName=qName;
              }
              
              
              
          //調用多次  
              @Override
              
          public void endElement(String uri, String localName, String qName)
                      
          throws SAXException {
                  
          if(qName.equals("student")){
                      
          this.list.add(this.student);
                  }
                  
          this.tagName=null;
              }
              
              
              
          //只調用一次
              @Override
              
          public void endDocument() throws SAXException {
              }
              
              
          //調用多次
              @Override
              
          public void characters(char[] ch, int start, int length)
                      
          throws SAXException {
                  
          if(this.tagName!=null){
                      String date
          =new String(ch,start,length);
                      
          if(this.tagName.equals("name")){
                          
          this.student.setName(date);
                      }
                      
          else if(this.tagName.equals("sex")){
                          
          this.student.setSex(date);
                      }
                      
          else if(this.tagName.equals("age")){
                          
          this.student.setAge(Integer.parseInt(date));
                      }
                      
          else if(this.tagName.equals("email")){
                          
          this.student.setEmail(date);
                      }
                      
          else if(this.tagName.equals("birthday")){
                          
          this.student.setBirthday(date);
                      }
                      
          else if(this.tagName.equals("memo")){
                          
          this.student.setMemo(date);
                      }
                  }
              }
              
              
              
              
          public static void main(String[] args) {
                  SAXParser parser 
          = null;
                  
          try {
                      
          //構建SAXParser
                      parser = SAXParserFactory.newInstance().newSAXParser();
                      
          //實例化  DefaultHandler對象
                      SaxParseXml parseXml=new SaxParseXml();
                      
          //加載資源文件 轉化為一個輸入流
                      InputStream stream=SaxParseXml.class.getClassLoader().getResourceAsStream("Student.xml");
                      
          //調用parse()方法
                      parser.parse(stream, parseXml);
                      
          //遍歷結果
                      List<Student> list=parseXml.getList();
                      
          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());
                      }
                  } 
          catch (ParserConfigurationException e) {
                      e.printStackTrace();
                  } 
          catch (SAXException e) {
                      e.printStackTrace();
                  } 
          catch (IOException e) {
                      e.printStackTrace();
                  }
              }
              
          }
              效果圖:

                  注:如需運行代碼,添加Student.xml到你的src目錄下即可
                  點我下載demo
          posted on 2010-08-03 08:24 雪山飛鵠 閱讀(1986) 評論(0)  編輯  收藏 所屬分類: javase
          主站蜘蛛池模板: 岳西县| 宁蒗| 康乐县| 普兰店市| 晋中市| 黑水县| 连云港市| 周口市| 定西市| 金华市| 灵宝市| 莱阳市| 莲花县| 江阴市| 青岛市| 沛县| 河津市| 永宁县| 思南县| 武陟县| 盐城市| 长治市| 永寿县| 嵊州市| 洱源县| 威海市| 宁城县| 安岳县| 嘉善县| 西林县| 花莲县| 万安县| 太白县| 嘉义市| 长沙市| 昌宁县| 平谷区| 肇东市| 托克托县| 茂名市| 新泰市|