快速入门
这篇文档为打算在项目中使用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