IBM上有的……
http://www.cn.ibm.com/developerWorks

解决方案 »

  1.   

    基于事件驱动的解析接口 SAX (实例一)SAX vs. DOM
    DOM是基于树结构的一种接口;SAX是基于事件驱动的解析接口。
    有什么区别呢?
    1、SAX 可以解析任意大小的文件,而 DOM 解析的文件大小则和硬件有关。DOM 需要将整个文件加载到内存,而 SAX 不需要。
    2、因为 SAX 是不把文件加载到内存,所以不能对文档进行随机存取;而 DOM 可以做到。
    3、SAX 相对 DOM 来说是简单易用。
    4、如果要从文档的简单系列中获取信息,SAX 是最快的方法。实例一、查查有多少本书?
    题目是要查出来下面的 XML 文件 books.xml 里有多少本书。<?xml version="1.0"?>
    <books>
    <book category="Programming">
    <author>XXX1</author>
    <title>Thinking in Java</title>
    <price unit="RMB">60.00</price>
    </book>
    <book category="Programming">
    <author>XXX2</author>
    <title>Thinking in C++</title>
    <price>56.00</price>
    </book>
    <book category="fiction">
    <author>Slepwormzz</author>
    <title>My Dirty Mind</title>
    <price>8.99</price>
    </book>
    </books>下面的代码使用了 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 文件改成错误的结构,看看 会有什么例外抛出