当前位置: 首页 > 工具软件 > SAX for .NET > 使用案例 >

JAXP解析XML之SAX解析

锺离晗昱
2023-12-01

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+">");
        }
    }

}
 类似资料: