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 NameNotes
gnu.xml.aelfred2.SAXDriverLightweight non-validating parser; Free Software
gnu.xml.aelfred2.XmlReaderOptionally validates; Free Software
oracle.xml.parser.v2.SAXParserOptionally validates; proprietary
org.apache.crimson.parser.XMLReaderImplOptionally validates; used in JDK 1.4; Open Source
org.apache.xerces.parsers.SAXParserOptionally validates; Open Source

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

 

 

 

TODO

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值