欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

XML复习之SAX 方式解析 XML

程序员文章站 2022-03-26 12:35:06
...

今日目录

        1、SAX 方式解析 XML 原理

        2、SAX 方式解析 XML 示例

一、SAX 方式解析 XML 原理

        SAX 的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)、开始与结束、文档(document)结束等地方时通知事件处理函数、由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。
    优点:消耗资源比较少;适合大文件解析;
    缺点:只能读取不能修改;开发复杂;
XML复习之SAX 方式解析 XML

二、SAX 方式解析 XML 示例

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

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

import java.util.ArrayList;
import java.util.List;


public class SAX02 extends DefaultHandler{
    private List<Student> students=null;
    private Student student=null;
    private String preTag=null;

    @Override
    public void startDocument() throws SAXException {
        System.out.print("开始读取文档");
        students=new ArrayList<Student>();
    }

    @Override
    public void endDocument() throws SAXException {
        System.out.println("\n结束读取文档");
    }

    @Override
    public void startElement(String uri, String localName, String qName,
                             Attributes attributes) throws SAXException {
        if("student".equals(qName)){
            student=new Student();
            student.setId(attributes.getValue(0));
        }
        preTag=qName;
    }

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        if("student".equals(qName)){
            students.add(student);
            student=null;
        }
        preTag=null;
    }

    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        if(preTag!=null){
            String content=new String(ch,start,length);
            if("name".equals(preTag)){
                student.setName(content);
            }else if("sex".equals(preTag)){
                student.setSex(content);
            }else if("age".equals(preTag)){
                student.setAge(Integer.parseInt(content));
            }
        }
    }

    public static void main(String[] args) throws Exception{
        SAXParserFactory factory=SAXParserFactory.newInstance();
        SAXParser parser=factory.newSAXParser();
        SAX02 sax02=new SAX02();
        parser.parse("src/students.xml", sax02);
        for(Student s:sax02.students){
            System.out.println(s);
        }
    }
}
XML复习之SAX 方式解析 XML

添加小编微信可以获取免费资源,二维码

XML复习之SAX 方式解析 XML


要用到的工具,关注公众号直接免费获取

XML复习之SAX 方式解析 XML


相关标签: XML