基于事件驱动的解析接口 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 文件改成错误的结构,看看 会有什么例外抛出
/* 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 文件改成错误的结构,看看 会有什么例外抛出
相关文章推荐
- 基于事件驱动的解析接口 SAX (实例二)
- 基于事件驱动的解析接口 SAX (实例三)
- [代码笔记] python 之 xml解析_sax:基于事件驱动的解析方式
- 基于事件驱动的文本语音转换TTS实例
- POI Sax 事件驱动解析Excel2003文件
- POI SAX 使用事件驱动解析Excel(03/07)---有错误
- sax和Dom解析xml文档 文档驱动和事件驱动
- sax(用于处理XML事件驱动的推模型)解析例子
- POI Sax 事件驱动解析Excel2007文件
- 基于数据驱动的接口测试框架设计
- Android驱动程序开发实例精讲-0_Android系统HAL驱动开发经典案例详解(基于Android4.0)
- 解析:Google基于数据驱动的招聘面试程序
- 基于事件的开源网络库—libevent:应用实例
- 基于事件驱动的领域模型实现框架 - 分析框架如何解决各种典型业务逻辑场景
- S5pv210 HDMI 接口在 Linux 3.0.8 驱动框架解析 (By liukun321 咕唧咕唧)
- misc设备驱动模型及实例解析
- 基于Java的开源的模型驱动转换器和抽象用户接口标识语言6.1发布
- 基于Java的开源的模型驱动转换器和抽象用户接口标识语言6.1发布
- SAX PULL解析实例
- 最简单的动态代理实例(spring基于接口代理的AOP原理)