孤侣洁 发表于 2007-4-8 23:35:13

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

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

恶魔 发表于 2007-4-9 09:08:39

<p>哈哈哈哈</p><p>我觉得的楼主的贴</p><p>要换个地方发</p><p>&nbsp;</p>
页: [1]
查看完整版本: 基于事件驱动的解析接口 SAX (实例二)