• SAX


    SAX 是一种事件驱动的 XML 数据处理模型。对于 DOM 模型,解析 XML 文档时,需要将所有内容载入内容。相比 DOM 模型,SAX 模型更为高效,它一边扫描一边解析 XML 文档。但与 DOM 模型相比,SAX 的操作更为复杂。

    简单示例:

    package com.huey.hello.sax;
    
    import java.io.InputStream;
    import java.io.StringWriter;
    
    import org.xml.sax.Attributes;
    import org.xml.sax.InputSource;
    import org.xml.sax.SAXException;
    import org.xml.sax.XMLReader;
    import org.xml.sax.helpers.DefaultHandler;
    import org.xml.sax.helpers.XMLReaderFactory;
    
    public class MySAXApp extends DefaultHandler {
        
        private StringWriter writer;
    
        public MySAXApp() {
            super();
        }
    
        public static void main(String args[]) throws Exception {
            XMLReader xr = XMLReaderFactory.createXMLReader();
            MySAXApp handler = new MySAXApp();
            xr.setContentHandler(handler);
            xr.setErrorHandler(handler);
            
            InputStream inStream = MySAXApp.class.getResourceAsStream("/files/hello.xml");
            InputSource inSource = new InputSource(inStream);
            xr.parse(inSource);
        }
        
        @Override
        public void startDocument() throws SAXException {
            writer = new StringWriter();
        }
        
        @Override
        public void endDocument() throws SAXException {
            System.out.println(writer.toString());
        }
        
        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {        
            writer.append('<').append(qName);
            for (int i = 0; i < attributes.getLength(); i++) {
                writer.append(' ')
                    .append(attributes.getLocalName(i))
                    .append('=').append('"')
                    .append(attributes.getValue(i))
                    .append('"');
            }
            writer.append('>');
        }    
        
        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {        
            writer.append("</").append(qName).append('>');        
        }
        
        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            String text = new String(ch, start, length);
            writer.append(text);
        }
    }
  • 相关阅读:
    Effective Java(二)—— 循环与 StringBuilder
    Java 错误:找不到或无法加载主类(源文件中含有包名 package)
    古代文学经典、现代文学经典
    逻辑一致、交叉验证
    框架设计的一些思考
    Ping
    Hypver-V中的快照
    事件日志订阅-基于 源已启动
    组策略--下发计划任务到计算机
    组策略--下发文件到计算机
  • 原文地址:https://www.cnblogs.com/huey/p/5515146.html
Copyright © 2020-2023  润新知