加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SAX解析XML-说明及示例代码

发布时间:2020-12-16 08:56:40 所属栏目:百科 来源:网络整理
导读:SAX解析XML SAX是一个用于处理XML事件驱动的“推”模型,虽然它不是W3C标准,但它却是一个得到了广泛认可的API。SAX解析器不像DOM那样建立一个完整的文档树,而是在读取文档时激活一系列事件,这些事件被推给事件处理器,然后由事件处理器提供对文档内容的访

SAX解析XML

SAX是一个用于处理XML事件驱动的“推”模型,虽然它不是W3C标准,但它却是一个得到了广泛认可的API。SAX解析器不像DOM那样建立一个完整的文档树,而是在读取文档时激活一系列事件,这些事件被推给事件处理器,然后由事件处理器提供对文档内容的访问。


SAL解析xml文件步骤
1. 创建SAX解析器工厂对象
2. 通过解析器工厂对象获取解析器对象
3. 通过解析器对象获取reader读取器
4. 设置reader事件处理器
5. 利用reader读取xml文件


下面是用SAX解析studeng.xml文件事例代码:

package SAX;

import java.io.StreamCorruptedException;
import java.util.ArrayList;

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

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

public class SAXDemo02 {

    /** * 使用Sax方法解析students.xml文件,保存到集合中 * @param args */
    public static void main(String[] args) throws Exception{
        //1.创建工厂 SAX分析工厂
        SAXParserFactory factory = SAXParserFactory.newInstance();

        //2.创建解释器
        SAXParser parser = factory.newSAXParser();

        //3.从解释器获取读取器
        XMLReader reader = parser.getXMLReader();
        StudentContentHandler2 studentContentHandler2 = new StudentContentHandler2();
        //4.设置内容处理器
        reader.setContentHandler(studentContentHandler2);

        //5.解析
        reader.parse("xmlstudent.xml");

        for(Student s:studentContentHandler2.getList()){
            System.out.println(s.getId()+"--"+s.getName()+"--"+s.getAge()+"--"+s.getSex());
        }
    }
}

class StudentContentHandler2 extends DefaultHandler{
    ArrayList<Student> list =new ArrayList<Student>();
    String currentTagName;
    Student student  = null;

    public ArrayList<Student> getList() {
        return list;
    }
    public void setList(ArrayList<Student> list) {
        this.list = list;
    }
    public String getCurrentTagName() {
        return currentTagName;
    }
    public void setCurrentTagName(String currentTagName) {
        this.currentTagName = currentTagName;
    }
    public Student getStudent() {
        return student;
    }
    public void setStudent(Student student) {
        this.student = student;
    }
    //内容处理器开始标签
    @Override
    public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException {

        currentTagName = qName;
        if(qName.equals("student")){
            student = new Student();

        }
    }
    //内容处理器 结束标签
    @Override
    public void endElement(String uri,String qName)
            throws SAXException {
        currentTagName = "";
        if(qName.equals("student")){
            list.add(student);
        }

    }
    //内容处理 处理内容标签
    @Override
    public void characters(char[] ch,int start,int length)
            throws SAXException {

        if(currentTagName.equals("name")){
            student.setName(new String(ch,start,length));
        }else if(currentTagName.equals("age")){
            student.setAge(Integer.parseInt(new String(ch,length)));
        }else if(currentTagName.equals("sex")){
            student.setSex(new String(ch,length));
        }else if(currentTagName.equals("id")){
            student.setId(Integer.parseInt(new String(ch,length)));
        }

    }


}

class Student{
    private int id;
    private String name;
    private int age;
    private String sex;
    public Student() {
        super();
        // TODO Auto-generated constructor stub
    }
    public Student(int id,String name,int age,String sex) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }

}

studeng.xml文件内容:


<?xml version="1.0" encoding="UTF-8"?>
<students>
    <student>
        <id>1</id>
        <name>zhangsan</name>
        <age>20</age>
        <sex>male</sex>
    </student>
    <student>
        <id>2</id>
        <name>lisi</name>
        <age>21</age>
        <sex>female</sex>
    </student>
</students>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读