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

          雪山飛鵠

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

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            215 Posts :: 1 Stories :: 674 Comments :: 0 Trackbacks
                    sax方式解析xml的優(yōu)點:
                    只要有jdk的存在,嚴(yán)格意義上來說是jre,它就可以運行,不依賴任何第三方的jar包。在移動設(shè)備上尤為廣泛使用。比如Android就使用它來解析xml。當(dāng)然Android更為推薦的是采用xmlpull來解析xml。這種方式也同樣適合javase。我在后期會為大家準(zhǔn)備使用xmlpull解析xml的demo。敬請關(guān)注。
                    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>好學(xué)生</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>好學(xué)生</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>好學(xué)生</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>好學(xué)生</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>好學(xué)生</memo>
              
          </student>
          </root>
              xml對應(yīng)的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;
              
          //構(gòu)建Student對象
              private Student student;
              
          //用來存放每次遍歷后的元素名稱(節(jié)點名稱)
              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;
              }


              
          //只調(diào)用一次  初始化list集合  
              @Override
              
          public void startDocument() throws SAXException {
                  list
          =new ArrayList<Student>();
              }
              
              
              
          //調(diào)用多次    開始解析
              @Override
              
          public void startElement(String uri, String localName, String qName,
                      Attributes attributes) 
          throws SAXException {
                  
          if(qName.equals("student")){
                      student
          =new Student();
                      
          //獲取student節(jié)點上的id屬性值
                      student.setId(Integer.parseInt(attributes.getValue(0)));
                      
          //獲取student節(jié)點上的group屬性值
                      student.setGroup(Integer.parseInt(attributes.getValue(1)));
                  }
                  
          this.tagName=qName;
              }
              
              
              
          //調(diào)用多次  
              @Override
              
          public void endElement(String uri, String localName, String qName)
                      
          throws SAXException {
                  
          if(qName.equals("student")){
                      
          this.list.add(this.student);
                  }
                  
          this.tagName=null;
              }
              
              
              
          //只調(diào)用一次
              @Override
              
          public void endDocument() throws SAXException {
              }
              
              
          //調(diào)用多次
              @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 {
                      
          //構(gòu)建SAXParser
                      parser = SAXParserFactory.newInstance().newSAXParser();
                      
          //實例化  DefaultHandler對象
                      SaxParseXml parseXml=new SaxParseXml();
                      
          //加載資源文件 轉(zhuǎn)化為一個輸入流
                      InputStream stream=SaxParseXml.class.getClassLoader().getResourceAsStream("Student.xml");
                      
          //調(diào)用parse()方法
                      parser.parse(stream, parseXml);
                      
          //遍歷結(jié)果
                      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
          主站蜘蛛池模板: 孟津县| 阳原县| 罗山县| 洪泽县| 隆尧县| 嘉义县| 类乌齐县| 东港市| 中山市| 元江| 汤原县| 景宁| 方山县| 胶南市| 林周县| 乾安县| 云阳县| 称多县| 扶风县| 论坛| 元氏县| 台南市| 德昌县| 灌阳县| 青海省| 凤凰县| 颍上县| 杭锦旗| 罗平县| 山东省| 库尔勒市| 六盘水市| 新安县| 临夏县| 昌乐县| 宁陕县| 阳高县| 兰考县| 通城县| 西青区| 九江县|