`

SAX2 - (Simple API to XML) Quickstart中文翻译

阅读更多

快速入门

这篇文档为打算在项目中使用SAX2的Java程序员提供一个快速的指南。

环境要求

SAX是一个被一些不同的XML解析器(或类似XML解析器的东西)继承的通用接口,就像JDBC是一个被不同的关系型数据库(或类似关系型数据库的东西)所继承的通用接口。如果你打算使用SAX,你需要满足如下要求:

  • Java1.1或更高
  • 一个与SAX2相适应的 XML解析器在classpath环境变量下(如果你需要这样的一个解析器,请查看左侧链接。http://www.saxproject.org/  (例如我使用并下载的是Xerces-J)**
  • SAX2表述文件安装在classpath环境变量下。(This probably came with your parser.)

多数JAVA/XML工具表述包涵一个解析器用到的SAX2。多数网络程序服务需要它作为核心的XML支持。特别指出,JAXP1.1环境支持当中包括SAX2。

 

解析一个文档

准备去建立一个继承DefaultHandler类的类文件:

import org.xml.sax.helpers.DefaultHandler;

public class MySAXApp extends DefaultHandler
{

    public MySAXApp ()
    {
	super();
    }

}

 一旦建立一个Java应用,我们需要建立一个利用XMLReaderFactory类的CreateXMLReader方法去动态选择一个SAX驱动的静态的main方法。注意“throws Exception"通常是用不到的;真正的应用当中或许需要真正的错误处理:

    public static void main (String args[])
	throws Exception
    {
	XMLReader xr = XMLReaderFactory.createXMLReader();
    }

 

 

一个简单的完整程序代码如下:

import java.io.FileReader;

import org.xml.sax.XMLReader;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.helpers.XMLReaderFactory;
import org.xml.sax.helpers.DefaultHandler;


public class MySAXApp extends DefaultHandler
{

    public static void main (String args[])
	throws Exception
    {
	XMLReader xr = XMLReaderFactory.createXMLReader();
	MySAXApp handler = new MySAXApp();
	xr.setContentHandler(handler);
	xr.setErrorHandler(handler);

				// Parse each file provided on the
				// command line.
	for (int i = 0; i < args.length; i++) {
	    FileReader r = new FileReader(args[i]);
	    xr.parse(new InputSource(r));
	}
    }


    public MySAXApp ()
    {
	super();
    }


    ////////////////////////////////////////////////////////////////////
    // Event handlers.
    ////////////////////////////////////////////////////////////////////


    public void startDocument ()
    {
	System.out.println("Start document");
    }


    public void endDocument ()
    {
	System.out.println("End document");
    }


    public void startElement (String uri, String name,
			      String qName, Attributes atts)
    {
	if ("".equals (uri))
	    System.out.println("Start element: " + qName);
	else
	    System.out.println("Start element: {" + uri + "}" + name);
    }


    public void endElement (String uri, String name, String qName)
    {
	if ("".equals (uri))
	    System.out.println("End element: " + qName);
	else
	    System.out.println("End element:   {" + uri + "}" + name);
    }


    public void characters (char ch[], int start, int length)
    {
	System.out.print("Characters:    \"");
	for (int i = start; i < start + length; i++) {
	    switch (ch[i]) {
	    case '\\':
		System.out.print("\\\\");
		break;
	    case '"':
		System.out.print("\\\"");
		break;
	    case '\n':
		System.out.print("\\n");
		break;
	    case '\r':
		System.out.print("\\r");
		break;
	    case '\t':
		System.out.print("\\t");
		break;
	    default:
		System.out.print(ch[i]);
		break;
	    }
	}
	System.out.print("\"\n");
    }

}

 它另外需要一个XML文档

<?xml version="1.0"?>

<poem xmlns="http://www.megginson.com/ns/exp/poetry">
<title>Roses are Red</title>
<l>Roses are red,</l>
<l>Violets are blue;</l>
<l>Sugar is sweet,</l>
<l>And I love you.</l>
</poem>

  运行命令为:

 如果这个文档被命名为roses.xml并且SAX2驱动已经加入到classpath环境变量里(假设驱动的名字是com.example.xml.SAXDriver(这个驱动并不真的存在))你可以解析这个事例应用,用类似下面的命令:

java -Dorg.xml.sax.driver=com.example.xml.SAXDriver MySAXApp roses.xml 

 注意:

这里的com.example.xml.SAXDriver尝尝被替换为目前被广泛使用的驱动例如

Class Name Notes
gnu.xml.aelfred2.SAXDriver Lightweight non-validating parser; Free Software
gnu.xml.aelfred2.XmlReader Optionally validates; Free Software
oracle.xml.parser.v2.SAXParser Optionally validates; proprietary
org.apache.crimson.parser.XMLReaderImpl Optionally validates; used in JDK 1.4; Open Source
org.apache.xerces.parsers.SAXParser Optionally validates; Open Source

(以上Class Name均不包含在SAX2文档包中,需另行下载*此例在 环境要求 里面的第二条已经要求过,经常会有找不到类的问题,就是因为此原因*)

 

 

 

TODO

 

 

分享到:
评论

相关推荐

    SAX--XML文件读写

    在Android开发中,由于内存限制和性能优化的需求,通常会选择SAX(Simple API for XML)解析器来读取XML文件,而非DOM(Document Object Model)解析器,因为SAX是基于事件驱动的,它按需逐个处理XML元素,占用内存...

    Simple API for XML(SAX)详解与实例

    **Simple API for XML (SAX)** 是一种轻量级的解析XML文档的API,它以事件驱动的方式处理XML数据。SAX不存储整个XML文档于内存中,而是逐行读取,这使得它在处理大型XML文件时比DOM(Document Object Model)更高效...

    Simple API for XML 2.0.x 版的使用

    IBM在线教程,教程探讨 Simple API for XML 2.0.x 版(或 SAX 2.0.x)的使用。它针对的是如下开发人员,他们理解 XML,并且希望学习这个用于操作 XML 数据的轻量级的、基于事件的 API。 这里假设读者熟悉诸如格式...

    perl-XML-SAX-Writer-0.53-4.el7.x64-86.rpm.tar.gz

    XML-SAX(Simple API for XML)是一种事件驱动的接口,用于处理XML文档。它允许Perl脚本以一种流的形式读取XML数据,每当解析器发现XML文档的特定部分(例如元素开始和结束、属性、字符数据等)时,就会触发相应的...

    stax-api.jar

    STAX(Streaming API for XML)是一种低级别的XML解析方法,相比DOM(Document Object Model)和SAX(Simple API for XML),STAX提供了一种更加灵活且高效的处理XML的方式。在STAX中,应用程序通过调用事件生成器来...

    simple-xml jar包

    **简单XML库(Simple-XML)详解** 在Java开发中,XML作为一种标准的数据交换格式,被广泛用于存储和传输数据。然而,XML的解析和序列化通常需要借助于专门的库来实现,其中Simple-XML就是一个高效且易于使用的库。...

    Android网络之数据解析----SAX方式解析XML数据

    本篇文章将深入探讨如何使用SAX(Simple API for XML)方式解析XML数据,这是Android网络通信中处理XML数据的一种高效方法。 一、XML与JSON数据 XML(eXtensible Markup Language)是一种用于标记数据的语言,它...

    XML-java.rar_XML SAX_sax_sax xml_sax 解析 xml_xml using dom

    Java作为一种强大的编程语言,提供了多种解析XML文档的方法,其中包括DOM(Document Object Model)和SAX(Simple API for XML)。本压缩包文件“XML-java.rar”包含了关于使用Java解析XML的实例,特别强调了SAX解析...

    android----xml Sax解析示例

    SAX(Simple API for XML)是XML的一种解析器,它采用事件驱动的方式处理XML文档,非常适合处理大型或内存有限的设备上的XML文件,如Android手机。 SAX解析的基本原理是,当解析器读取XML文档时,遇到每个元素、...

    QT使用SAX读取xml高效-快速.rar

    SAX(Simple API for XML) 如果你只想读取并显示整个XML文档,那么SAX是很好的选择,因为它提供了比DOM更简单的接口,并且它不需要将整个XML文档一次性读入内存,这样便可以用来读取较大的文件 SAX只能读取,不能...

    Sax解析XML文件解析

    SAX(Simple API for XML)是XML解析的一种方法,它以事件驱动的方式处理XML文档,非常适合处理大体积的XML文件,因为它不需要一次性加载整个文件到内存,而是逐行读取,因此节省了资源。 **SAX解析XML的基本原理:...

    DOM.rar_DOM SAX_XML DOM_dom xml java_sax_simple

    DOM(Document Object Model)和SAX(Simple API for XML)是解析XML文档的两种主要方法。 DOM是一种W3C标准,它将XML文档视为一棵树形结构,其中每个节点代表XML文档的一部分。在DOM解析中,整个XML文档被加载到...

    perl-XML-SAX-0.99-9.el7.noarch.rpm

    离线安装包,亲测可用

    Android代码-simple-easy-xml-parser

    A simple, high performance, typed XML parser based upon Android sax parser but written in pure Java. SEXP gives callbacks for all parsing events and being written in pure java allows faster and more ...

    SAX2方法读取XML文件

    SAX(Simple API for XML)是一种事件驱动的XML解析器,它以流式的方式处理XML文档,对内存的需求较小,适合处理大型XML文件。SAX2是SAX的第二版本,它在SAX的基础上进行了一些改进和扩展。 在C++中,Xerces-C++库...

    SAX_XML.rar_XML SAX_sax xml_xml

    SAX(Simple API for XML)是XML解析器的一种,它以事件驱动的方式解析XML文档,而非DOM(Document Object Model)解析器那样将整个XML文档加载到内存中。SAX解析器在处理大型XML文件时更高效,因为它只在需要时读取...

    sax解析xml本地读取xml

    SAX(Simple API for XML)是XML解析器的一种,它采用事件驱动的方式对XML文档进行解析,而不是一次性加载整个文档到内存中,因此在处理大型XML文件时,SAX解析器具有较高的性能和较低的内存消耗。 标题“sax解析...

    XML.rar_XML SAX_XML java_dom xml_java xml_java解析xml

    SAX(Simple API for XML)是一种基于事件驱动的解析方式,它不会一次性加载整个XML文档,而是逐行读取,当遇到文档的某个部分(如开始标签、结束标签等)时,触发相应的事件回调。这种方式内存占用小,适合处理大...

    test_sax.rar_XML SAX vs20_sax_sax xml_读取XML文档

    在处理大型XML文件时,为了提高效率,通常会采用两种解析器:DOM(Document Object Model)和SAX(Simple API for XML)。本文将重点讨论SAX解析器,并通过描述中的"test_sax.rar"压缩包中的示例,讲解如何使用SAX...

    VTD-XML技术解析XML实例

    然而,XML文档的大小和复杂性可能导致传统DOM(Document Object Model)和SAX(Simple API for XML)解析器在处理时遇到性能问题。VTD-XML通过创建VTD索引来解决这个问题,它只需要加载部分或关键部分的XML数据到...

Global site tag (gtag.js) - Google Analytics