SAX - Hello World

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);
    }
}
时间: 2024-08-05 14:15:52

SAX - Hello World的相关文章

SAX解析XML

SAX 事件处理(事件驱动),不需要载入整个文档,流机制读取,分析XML文档 startDocument startElement character endElement endDocument 当sax扫描到文档时就调用startDocument函数,sax扫描到文档结束符时就调用endDocument函数,也就是说当sax扫描到哪个节点时就会调用相应的函数,同时还会携带节点的属性值. 当它扫描到节点内容值时就会调用character函数 Sax主要是用来对xml文件遍历,解析,不提供修改.

XML引入,DOM 方式解析XML 原理,SAX 方式解析XML

XML 简介 Xml(eXtensible Markup Language) 即可扩展标记语言.提供了一套跨平台.跨网络.跨程序的语言的数据描述方式,使用XML 可以方便地实现数据交换.系统配置.内容管理等常见功能. 元素VS 节点 节点包括元素节点.属性节点.文本节点:元素一定是节点,但是节点不一定是元素: <?xml version="1.0" encoding="UTF-8"?> <emp> <empName empNo=&quo

XML.03-DOM和SAX解析

body,td { font-family: calibri; font-size: 10pt } XML.03-DOM和SAX解析 XML的DOM解析 解析 处理 回写 XML的SAX解析 SAX和DOM方式的不同: SAX解析原理 SAX解析范例 解析xml常用的有两种方式,DMO和SAX DOM和SAX的区别: DOM: 在内存中生成树桩结构 优点是可以支持增删改查各种操作 缺点在于,如果文档过大的时候,可能会产生内存溢出的风险 SAX: 基于事件驱动,边读边解析 优点:占用内存小 缺点,

SAX解析

1DOM解析与SAX解析比较: DOM解析 SAX解析 原理: 一次性加载xml文档,不适合大容量的文件读取 原理: 加载一点,读取一点,处理一点.适合大容量文件的读取 DOM解析可以任意进行增删改成 SAX解析只能读取 DOM解析任意读取任何位置的数据,甚至往回读 SAX解析只能从上往下,按顺序读取,不能往回读 DOM解析面向对象的编程方法(Node,Element,Attribute),Java开发者编码比较简单. SAX解析基于事件的编程方法.java开发编码相对复杂. 2 SAX解析工具

dom、SAX、Jdom、dom4j四种解析xml方式简单总结

1,dom和sax是java官方提供的解析方式,不需要导入额外jar包,dom甚至一种标准. dom是一次性将整个xml文件dom结构加载进内存,因此比较占空间. 优点: *形成了树结构,直观好理解,代码更易编写 *解析过程中树结构保留在内存中,方便修改 缺点: !当Xml文件过大时,对内存消耗过大,容易影响解析性能并造成内存溢出. 2,sax是一种基于事件驱动的xml解析方式.在使用是需要编写专门的handler,在文档开头会触发startDocument()方法.解析到节点除法startEl

org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 前言中不允许有内容。

二月 25, 2016 9:24:24 下午 org.apache.tomcat.util.digester.SetPropertiesRule begin 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:SpringMvc-1' did not find a matching property. 二月 25,

解析XML文件的几种常见操作方法:DOM/SAX/DOM4j

1 <?xml version="1.0" encoding="utf-8"?> 2 <root> 3 <class name="class1"> 4 <student> 5 <name>张三</name> 6 <age>20</age> 7 <sex>男</sex> 8 </student> 9 <stude

xml多层嵌套解析方法SAX方式(包括网络请求)

启用异步类获取数据 package com.bwie.myasynctask; import java.io.IOException;import java.io.InputStream;import java.io.Serializable;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.List; import javax.xml.parsers.ParserCon

JAVA解析XML之SAX方式

JAVA解析XML之SAX方式 SAX解析xml步骤 通过SAXParseFactory的静态newInstance()方法获取SAXParserFactory实例factory 通过SAXParserFactory实例的newSAXParser()方法返回SAXParser实例parser 创建一个类继承DefaultHandle,重写方法进行业务处理并创建这个类的实例handle 重写DefaultHandle类的方法 startElement方法用来遍历xml文件的开始标签; endEle

Android简化xml sax解析

dom解析占用内存大(我这边需要解析各种各样的kml文件,有时4-5M的kml文件使用dom解析很多手机就内存溢出了),也需要引入第三方库,所以使用相对于节省内存很多.不需引入其他库的sax解析就是很好的选择了.因为sax解析比较复杂的xml文件特别麻烦,所以整理了一个简化android sax解析的工具. 实现思路:和Android Touch事件传递机制一样,把需要子解析器解析的节点往下传递. 如果有进一步简化的方法,欢迎交流!email:[email protected]. 示例程序:ht