精华区 [关闭][返回]

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

主题:[转载]:XML编程研究(二)[转载]
发信人: zjxyz(xyz)
整理人: leitiger(2001-06-27 15:24:49), 站内信件
★原文转载自Java版zjxyz的《XML编程研究(二)[转载]》★
基于事件驱动的解析接口 SAX (实例二)  


实例二、查查看我的 书架 中有多少本 小说 书(获取元素的属性值)  

题目是要查出来下面的 XML 文件 books.xml 里有多少本 小说。  

<?xml version="1.0" encoding="gb2312"?>  
<书架>  
<书 类别="参考书">  
<著者>谭浩强</著者>  
<书名>学习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  

转载自北京社区XML版


----

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

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

[关闭][返回]