温馨提示:您的每一次转载,体现了我写此文的意义!!!烦请您在转载时注明出处http://www.blogjava.net/sxyx2008/谢谢合作!!!

雪山飞鹄

温馨提示:您的每一次转载,体现了我写此文的意义!!!烦请您在转载时注明出处http://www.blogjava.net/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 雪山飞鹄 阅读(1928) 评论(0)  编辑  收藏 所属分类: javase

只有注册用户登录后才能发表评论。


网站导航: