📄 0148.htm
字号:
<html>
<head>
<title>新时代软件教程:操作系统 主页制作 服务器 设计软件 网络技术 编程语言 文字编辑</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style>
<!--
body, table {font-size: 9pt; font-family: 宋体}
a {text-decoration:none}
a:hover {color: red;text-decoration:underline}
.1 {background-color: rgb(245,245,245)}
-->
</style>
</head>
<p align="center"><script src="../../1.js"></script></a>
<p align="center"><big><strong>XML和JSP交互技术(3)</strong></big></p>
<div align="right">---摘自《JSP爱好者》 (文/刘玉锋)</div>
<br> 4) 实施HandlerBase接口<br>
<br>
在这里我们编写一个myHandler的类,它用来实施HandlerBase接口,并且覆盖接口的三个主要方法startElement(String tag, AttributeList attrs)、characters(char[] ch, int start, int length)、endElement(String name)以便能对XML文件进行操作。<br>
<br>
为了保存数据以便外部程序能够调用本类中的数据,我们采用了哈希表结构来保存解析XML文件后的所有节点名字以及节点的数据值,startElement()方法主要用来读取XML文件中的节点名称,characters()方法主要用来根据节点名称读取节点数据,endElement()方法主要是在一个XML节点处理完毕后将这对节点名称和节点数据保存在哈希表中。<br>
<br>
在外部程序中我们只需要调用getTable()方法返回一个哈希表对象就可以读取所有的节点和节点数据值了。<br>
<br>
代码不多,而且我在下面添加了很多注释,应该很好看懂了。<br>
<br>
myHandler.java文件<br>
<br>
file://文件放置在包com.jsp21.www中<br>
<br>
package com.jsp21.www;<br>
<br>
file://导入相关的java API<br>
<br>
import java.io.*;<br>
<br>
import org.w3c.dom.*;<br>
<br>
import org.xml.sax.*;<br>
<br>
import javax.xml.parsers.SAXParser;<br>
<br>
import javax.xml.parsers.SAXParserFactory;<br>
<br>
import java.util.Hashtable;<br>
<br>
import java.util.Enumeration;<br>
<br>
// myHandler类实现HandlerBase接口;<br>
<br>
public class myHandler extends HandlerBase {<br>
<br>
private String myElement = null; file://XML文件中的标记名称;<br>
<br>
private String myValue = null; file://XML文件中标记对应的值;<br>
<br>
private Hashtable mytable = new Hashtable(); file://用来保存XML文件中所有的数据;<br>
<br>
file://得到保存有XML数据的哈希表Hashtable;<br>
<br>
public Hashtable getTable() {<br>
<br>
return mytable;<br>
<br>
}<br>
<br>
file://覆盖HandlerBase接口中的startElement方法,读取一行XML数据的开始标记时候执行此方法;<br>
<br>
// tag代表XML中的标记,如前面XML文件中的NAME AGE等;<br>
<br>
public void startElement(String tag, AttributeList attrs)<br>
<br>
throws SAXException {<br>
<br>
myElement = tag;<br>
<br>
}<br>
<br>
file://覆盖HandlerBase接口中的characters方法,主要用来得到和之间具体的数据;<br>
<br>
// 当对应myElement的标记发现值后,也就是startElement方法执行完毕后,就会触发这个characters方法来得到具体的数值;<br>
<br>
file://如myElement="姓名"时候,myValue就会等于"刘玉锋";<br>
<br>
public void characters(char[] ch, int start, int length)<br>
<br>
throws SAXException {<br>
<br>
myValue = new String(ch, start, length);<br>
<br>
}<br>
<br>
file://覆盖HandlerBase接口中的endElement方法,主要用来在一行XML数据读取完毕后进行自己的处理;<br>
<br>
// 当XML文件中一行标记读取完毕后,触发此endElement方法;<br>
<br>
file://如果存在对应的结束标记,就将前面得到的标记myElement和值myValue<br>
<br>
file://放入到mytable哈希表中;<br>
<br>
public void endElement(String name) throws SAXException {<br>
<br>
if ( myElement.equals(name) ) {<br>
<br>
mytable.put(myElement, myValue);<br>
<br>
}<br>
<br>
}<br>
<br>
}<br>
<br>
好了,编译这个class,并把myHandler.class文件放置在CLASSPATH能找到的路径中,比如Tomcat中应用程序的Web-inf\classes\com\jsp21\www目录下。
</table>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -