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

<script type="text/javascript"> google_ad_client = "pub-8800625213955058"; /* 336x280, 创建于 07-11-21 */ google_ad_slot = "0989131976"; google_ad_width = 336; google_ad_height = 280; // </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 基于事件驱动的解析接口 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 文件改成错误的结构,看看 会有什么例外抛出
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值