XML复习之SAX 方式解析 XML

今日目录

        1、SAX 方式解析 XML 原理

        2、SAX 方式解析 XML 示例

一、SAX 方式解析 XML 原理

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

二、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);
        }
    }
}

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


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


猜你喜欢

转载自blog.csdn.net/wtyicy/article/details/80579641