精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>XML>>(3)XML开发技术>>[转载]:XML编程研究(一)[转载]

主题:[转载]:XML编程研究(一)[转载]
发信人: zjxyz(xyz)
整理人: leitiger(2001-06-27 15:24:49), 站内信件
★原文转载自Java版zjxyz的《XML编程研究(一)[转载]》★
基于事件驱动的解析接口 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 文件改成错误的结构,看看 会有什么例外抛出  

转载自北京社区XML版


----

█████████
█┌─────┐█      ############################
█│网易GZ社区│█      【XYZ资料室】
█│  JAVA版  │█      http://zjxyz.yeah.net
█│  版★主  │█      OICQ:5452479
█│  专用章  │█      电子邮件:[email protected]
█└─────┘█                           XYZ
█████████      ############################

广州社区JAVA版§【网易广州社区JAVA版发帖规范】 

[关闭][返回]