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

JAXP解析XML之SAX解析

程序员文章站 2022-05-28 07:59:28
...

JAXP解析XML之SAX解析

Jaxp解析XML之DOM解析:https://blog.csdn.net/sinat_32366329/article/details/80201544

什么是SAX解析

SAXsimple API forXML)是一种XML解析的替代方法。相比于DOMSAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。而且相比于DOM,SAX可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于SAX来说就是操作复杂。

DOM SAX对比

SAX

DOM

依序读入文件并产生相对应事件,可以处理任何大小的XML文件

在内存中建立文件树,不适于处理大型的XML文件。

只能对文件按顺序剖析一遍,不支持对文件的随意存取

可以随意存取文件树的任何部分,没有次数限制

通常只去能读取XML文件内容,修改起来很麻烦

可以随意修改文件树,从而修改了XML文件

开发上比较复杂,需要自己来制作事件处理器

易于理解,易于开发

对工作人员更灵活,可以用SAX建立自己的XML对象模型

已经在DOM基础之上建立了文件树

Demo案例

Jaxp.xml

<?xml version="1.0" encoding="UTF-8"?>
<department>
    <user no="001">
        <name>郭靖</name>
        <six>男</six>
        <age>25</age>
    </user>
    <user no="002">
        <name>黄蓉</name>
        <six>女</six>
        <age>20</age>
    </user>
</department>

Java代码

package com.rabbit.sax;

import org.junit.Test;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.IOException;

/**
 * jaxp的sax解析
 * Created by HASEE on 2018/5/5.
 */
public class JaxpSaxDemo {

    @Test
    public void test() throws ParserConfigurationException, SAXException, IOException {
        //创建SAXParserFactory工厂实例
        SAXParserFactory sax = SAXParserFactory.newInstance();
        //通过工厂方法获取SAXParser实例
        SAXParser parser = sax.newSAXParser();
        //创建XML解析器
        XMLReader reader = parser.getXMLReader();
        //设置自己的处理器对象
        reader.setContentHandler(new MyContentHandler());
        //解析XML
        reader.parse(this.getClass().getResource("/jaxp.xml").getPath());
    }

    class MyContentHandler extends DefaultHandler {

        @Override
        public void startDocument() throws SAXException {
            System.out.println("开始读取Document");
        }

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

        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            System.out.println("</" + qName + ">");
        }

        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            String str = new String(ch, start, length);
            if (str.trim().length() > 0) {
                System.out.println("characters:" + str);
            }
        }

        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            System.out.println("<"+qName+">");
        }
    }

}
相关标签: SAX解析XML SAX