一起学习
基于事件驱动的解析接口 SAX (实例二)
实例二、查查看我的 书架 中有多少本 小说 书(获取元素的属性值)
题目是要查出来下面的 XML 文件 books.xml 里有多少本 小说。
<书架>
<书 类别="参考书">
<著者>谭浩强著者>
<书名>学习C书名>
<价格>20.00价格>
书>
<书 类别="小说">
<著者>吴承恩著者>
<书名>西游记书名>
<价格>120.56价格>
书>
<书 类别="小说">
<著者>曹雪芹著者>
<书名>红楼梦书名>
<价格>208.99价格>
书>
<书 类别="小说">
<著者>睡虫著者>
<书名>下月出版书名>
<价格>0.00价格>
书>
书架>
下面的代码使用了 SUN 的 JAXP 包,请在 下载。
在 Jbuilder4 中运行正确。请注意将要分析的 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("");
}
// 当每次碰到一个 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
下载本文示例代码
基于事件驱动的解析接口 SAX (实例二)基于事件驱动的解析接口 SAX (实例二)基于事件驱动的解析接口 SAX (实例二)基于事件驱动的解析接口 SAX (实例二)基于事件驱动的解析接口 SAX (实例二)基于事件驱动的解析接口 SAX (实例二)基于事件驱动的解析接口 SAX (实例二)基于事件驱动的解析接口 SAX (实例二)基于事件驱动的解析接口 SAX (实例二)基于事件驱动的解析接口 SAX (实例二)基于事件驱动的解析接口 SAX (实例二)基于事件驱动的解析接口 SAX (实例二)
阅读(227) | 评论(0) | 转发(0) |