?? 0149.htm
字號:
<html>
<head>
<title>新時(shí)代軟件教程:操作系統(tǒng) 主頁制作 服務(wù)器 設(shè)計(jì)軟件 網(wǎng)絡(luò)技術(shù) 編程語言 文字編輯</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交互技術(shù)(2)</strong></big></p>
<div align="right">---摘自《JSP愛好者》 (文/劉玉鋒)</div>
<br> 三、JSP和XML交互<br>
<br>
前面已經(jīng)說過了,Jsp通過SUN公司的API-JAXP可以實(shí)現(xiàn)和XML的交互,那么具體實(shí)現(xiàn)主要有兩種方法,一種是采用DOM2 API,另外一種是采用SAX2 API。<br>
<br>
在這里我們主要討論JAXP中的SAX(Simple API for XML Parsing)技術(shù),DOM2技術(shù)可以看SUN公司相關(guān)的文檔。<br>
<br>
1)關(guān)于SAX模型<br>
<br>
SAX模型是一種處理XML文件的方法,它是事件驅(qū)動(dòng)的,有些類似于AWT中的事件驅(qū)動(dòng)機(jī)制,通過事件驅(qū)動(dòng)來識別XML文檔的內(nèi)容。在API中關(guān)于SAX的主要有下面的幾個(gè)包:<br>
<br>
oorg.xml.sax<br>
<br>
oorg.xml.sax.helpers<br>
<br>
oorg.xml.sax.ext<br>
<br>
在前臺的Java程序或者是Jsp程序中通過調(diào)用這幾個(gè)包中的API就可以很好地實(shí)現(xiàn)Java和XML的交互。<br>
<br>
2)關(guān)于HandlerBase接口<br>
<br>
我們知道在AWT中一般是通過實(shí)施ActionListener等接口實(shí)現(xiàn)事件的處理的,同樣的在SAX中SUN也提供了一個(gè)類似的接口HandlerBase來處理XML解析的功能,通過將HandlerBase和XML文件關(guān)聯(lián)可以很好的來處理XML文件。<br>
<br>
在實(shí)施接口中我們主要重載三個(gè)HandlerBase的方法startElement(String tag, AttributeList attrs)、characters(char[] ch, int start, int length)、endElement(String name)。<br>
<br>
startElement()在讀取一行XML數(shù)據(jù)的開始標(biāo)記時(shí)候觸發(fā),子類必須覆蓋這個(gè)方法,這樣就可以在處理XML節(jié)點(diǎn)前先進(jìn)行自己的處理(比如開始讀取或者寫入XML文件中的節(jié)點(diǎn)時(shí)候)。<br>
<br>
public void startElement (String name, AttributeList attributes)<br>
<br>
throws SAXException<br>
<br>
{<br>
<br>
// no op<br>
<br>
}<br>
<br>
參數(shù)name代表XML節(jié)點(diǎn)名字,attributes代表默認(rèn)或者特殊的屬性,這個(gè)方法拋出一個(gè)違例org.xml.sax.SAXException。<br>
<br>
characters()方法主要用來處理和之間具體的數(shù)據(jù),在處理節(jié)點(diǎn)數(shù)據(jù)時(shí)候觸發(fā),我們可以覆蓋這個(gè)方法來進(jìn)行數(shù)據(jù)操作的處理,可以添加代碼讀取節(jié)點(diǎn)數(shù)據(jù)值或者是寫入節(jié)點(diǎn)數(shù)據(jù)值。<br>
<br>
public void characters (char ch[], int start, int length)<br>
<br>
throws SAXException<br>
<br>
{<br>
<br>
// no op<br>
<br>
}<br>
<br>
參數(shù)ch[]代表一個(gè)字符數(shù)組,start代表字符數(shù)組的開始位置,length代表要取的字符數(shù)組中ch[]中的元素個(gè)數(shù),同樣的這個(gè)方法拋出一個(gè)違例org.xml.sax.SAXException。<br>
<br>
endElement()方法在處理節(jié)點(diǎn)元素結(jié)束的時(shí)候觸發(fā),也就是碰到標(biāo)記的時(shí)候,我們可以覆蓋這個(gè)方法來進(jìn)行數(shù)據(jù)的收尾工作,比如將節(jié)點(diǎn)數(shù)據(jù)寫入到文件中。<br>
<br>
public void endElement (String name)<br>
<br>
throws SAXException<br>
<br>
{<br>
<br>
// no op<br>
<br>
}<br>
<br>
參數(shù)name代表XML節(jié)點(diǎn)名字,這個(gè)方法拋出一個(gè)違例org.xml.sax.SAXException<br>
<br>
從上面我們也可以看出,三個(gè)方法在XML事件處理中的順序依次為:<br>
<br>
startElement()àcharacters()àendElement(String name)<br>
<br>
也許還不好理解,不要緊在下面我們將會寫一個(gè)類myHandler類實(shí)現(xiàn)HandlerBase接口,并且覆蓋這三個(gè)主要的方法來實(shí)現(xiàn)我們的XML文件讀取操作。<br>
<br>
3)關(guān)于哈希表 <br>
<br>
由于程序用到了哈希表,所以在這里先簡單的介紹一下哈希表的基本語法以便大家能更好的理解下面的程序。<br>
<br>
哈希表HashTable是從Dictionary派生出來的,里面具有一系列的關(guān)鍵字和數(shù)值,一個(gè)關(guān)鍵字對應(yīng)一個(gè)數(shù)值,識別主要是通過對象的哈希代碼hashCode識別。<br>
<br>
我們程序中用到的方法如下:<br>
<br>
put(Object key,Object value)添加一對關(guān)鍵字/數(shù)值到哈希表中<br>
<br>
get(Object key)根據(jù)關(guān)鍵字得到它的值<br>
<br>
keys()取得所有關(guān)鍵字并返回一個(gè)集合Enumeration<br>
<br>
此外,哈希表還具有其他很多有用的方法如長度size()、是否為空empty()、是否重復(fù)containsKey()等等,限于篇幅在這里就不進(jìn)行介紹了。
</table>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -