|
|
| 基于事件驱动的解析接口 SAX (实例二) |
作者:
文章来源:
访问次数:171次
加入时间:2007年02月11日
|
|
基于事件驱动的解析接口 SAX (实例二)
实例二、查查看我的 书架 中有多少本 小说 书(获取元素的属性值)
题目是要查出来下面的 XML 文件 books.xml 里有多少本 小说。
<书架> <书 类别="参考书"> <著者>谭浩强著者> <书名>学习C书名> <价格>20.00价格> 书> <书 类别="小说"> <著者>吴承恩著者> <书名>西游记书名> <价格>120.56价格> 书> <书 类别="小说"> <著者>曹雪芹著者> <书名>红楼梦书名> <价格>208.99价格> 书> <书 类别="小说"> <著者>睡虫著者> <书名>下月出版书名> <价格>0.00价格> 书> 书架>
下面的代码使用了 SUN 的 JAXP 包,请在 http://java.sun.com/xml/download.html 下载。 在 Jbuilder4 中运行正确。请注意将要分析的 xml 文件放在 http://localhost/books.xml 或者更改此 URI
import org.xml.sax.*; import javax.xml.parsers.*;
/** * Title: XML Study, Sample 2 * Description: Count fictions in my shelf. * Copyright: Copyright (c) 2001 * Company: Isolation Land. * @author Slepworm * @version 1.0 */
public class GetAtts extends org.xml.sax.helpers.DefaultHandler{
private int count = 0; // 定义一个计数器 private boolean isFiction;
public GetAtts() { }
// 创建一个新的 JAXP 的 SAXParserFactory 实例,并且配置它。 public void createParser() throws Exception { SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setValidating(false); SAXParser sp = spf.newSAXParser(); XMLReader xr = sp.getXMLReader(); xr.setContentHandler(this); xr.parse("http://localhost/books.xml"); }
// 当每次碰到一个 book 元素的时候,将 计数器 加一。此方法在遇到第一个元素的时候开始执行 public void startElement(String namespaceURI, String localName, String rawName, Attributes atts) throws SAXException { if (rawName.equals("书")) { String category = atts.getValue("类别"); ///**** 获取 类别 的值 System.out.println(category); //打印 类别 的值 isFiction = (category != null && category.equals("小说")); //如果 类别 的值为 小说 则将计数器加一。 if (isFiction) count++; } }
// 输出 计数器。此方法在分析文档完成的时候执行 public void endDocument() throws SAXException { System.out.print(count); }
public static void main(String[] args) throws Exception { BookCounter ga = new GetAtts(); ga.createParser(); } }
输出结果 为
参考书 小说 小说 小说 3
|
|
|