快速入門
這篇文檔為打算在項目中使用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 |
---|---|
| Lightweight non-validating parser; Free Software |
| Optionally validates; Free Software |
| Optionally validates; proprietary |
| Optionally validates; used in JDK 1.4; Open Source |
| Optionally validates; Open Source |
(以上Class Name均不包含在SAX2文檔包中,需另行下載下傳*此例在 環境要求 裡面的第二條已經要求過,經常會有找不到類的問題,就是因為此原因*)
TODO