您的位置:首页 > 其它

基于事件驱动的解析接口 SAX (实例一)

2008-05-23 03:55 375 查看
google_ad_client = "pub-8800625213955058";

/* 336x280, 创建于 07-11-21 */

google_ad_slot = "0989131976";

google_ad_width = 336;

google_ad_height = 280;

//

基于事件驱动的解析接口 SAX (实例一)

SAX vs. DOM

DOM是基于树结构的一种接口;SAX是基于事件驱动的解析接口。

有什么区别呢?

1、SAX 可以解析任意大小的文件,而 DOM 解析的文件大小则和硬件有关。DOM 需要将整个文件加载到内存,而 SAX 不需要。

2、因为 SAX 是不把文件加载到内存,所以不能对文档进行随机存取;而 DOM 可以做到。

3、SAX 相对 DOM 来说是简单易用。

4、如果要从文档的简单系列中获取信息,SAX 是最快的方法。

实例一、查查有多少本书?

题目是要查出来下面的 XML 文件 books.xml 里有多少本书。



XXX1

Thinking in Java

60.00

XXX2

Thinking in C

56.00

Slepwormzz

My Dirty Mind

8.99

下面的代码使用了 SUN 的 JAXP 包,请在 http://java.sun.com/xml/download.html 下载。

在 Jbuilder4 中运行正确。

import org.xml.sax.*;

import javax.xml.parsers.*;

import java.io.IOException;

/**

* Title: XML Study, Sample 1

* Description: Count My books.

* Copyright: Copyright (c) 2001

* Company: Isolation Land.

* @author Slepworm

* @version 1.0

*/

public class BookCounter extends org.xml.sax.helpers.DefaultHandler{

private int count = 0; // 定义一个计数器

public BookCounter() {

}

// 主程序

public void countBooks() throws Exception {

// 创建一个新的 JAXP 的 SAXParserFactory 实例,并且配置它。在 JAXP 包的例子中可以看到此种方法

SAXParserFactory spf = SAXParserFactory.newInstance();

spf.setValidating(false); // 试一下改为 true

XMLReader xr = null;

try {

SAXParser sp = spf.newSAXParser();

xr = sp.getXMLReader();

} catch (Exception e) {

System.err.print(e);

System.exit(1);

}

xr.setContentHandler(this);

try {

xr.parse("http://localhost/books.xml"); //进行语法分析

} catch (SAXException se) {

System.err.println(se.getMessage());

System.exit(1);

} catch (IOException ioe) {

System.err.println(ioe);

System.exit(1);

}

}

// 当每次碰到一个 book 元素的时候,将 计数器 加一。此方法在遇到第一个元素的时候开始执行

public void startElement(String namespaceURI, String localName, String rawName, Attributes atts) throws SAXException {

if (rawName.equals("book"))

count ;

}

// 输出 计数器。此方法在分析文档完成的时候执行

public void endDocument() throws SAXException {

System.out.print(count);

}

public static void main(String[] args) throws Exception {

BookCounter bc = new BookCounter();

bc.countBooks();

}

}

我们可以看到输出了结果 为 3

试着把 books.xml 文件改成错误的结构,看看 会有什么例外抛出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: