吳永光 王曉巖
[摘要]ASP讀取XML數(shù)據(jù)是開發(fā)過程中經(jīng)常遇到的一個難題,具體介紹ASP讀取XML數(shù)據(jù)的實現(xiàn)方法。
[關(guān)鍵詞]ASP 讀取 XML 方法
中圖分類號:TP3文獻(xiàn)標(biāo)識碼:A文章編號:1671-7597(2009)0510032-01
一、引言
ASP是Web服務(wù)器端的開發(fā)環(huán)境,利用它可以產(chǎn)生和執(zhí)行動態(tài)的、互動的、高性能的Web服務(wù)應(yīng)用程序,在ASP文件中訪問數(shù)據(jù)庫是最常用的操作,而擴展標(biāo)記語言XML從本質(zhì)上看就是數(shù)據(jù)庫,它是自描述性的,可交換的,能夠以樹狀或圖形結(jié)構(gòu)描述數(shù)據(jù)。用XML文件存取數(shù)據(jù),可以減少額外的服務(wù)器負(fù)荷,而且XML文件編寫、備份和下載都很容易。ASP讀取XML數(shù)據(jù)有多種方法。
二、ASP讀取XML數(shù)據(jù)的方法
(一)創(chuàng)建MSXML對象,并且將XML文檔載入DOM。為了在ASP中使用DOM,需要創(chuàng)建一個DOM對象,然后加載XML文檔。在XML文檔加載之前,需設(shè)置validateOnParse屬性為true,這可確保被加載的文檔為有效的XML文檔,從而可以避免后面遇到的各種麻煩,實例代碼片段如下:
Set objxml=Server.CreateObject("MicrosoftXMLDOM")
Objxml.validateOnParse=true
Objxml.load(Server.Mappath("example.xml"))
Set objrootelement=objxml.documentElement
(二)使用服務(wù)器端嵌入。服務(wù)器端嵌入可用于將XML文檔代碼插入ASP頁面,如同處理任何其它基于文本的文檔一樣。使用這種方法的唯一問題是,XML代碼不是在服務(wù)器端分析,而是作為XML直接發(fā)送至客戶端。如果有意在客戶端創(chuàng)建一個XML數(shù)據(jù)島,這種方法是可以接受的。但在大多數(shù)情況下,瀏覽器忽略這種標(biāo)記,因此,分析結(jié)果將毫無用處。
一個例外情形是,SSI代碼是用HTML標(biāo)記組成的XML文檔。例如下列描述一本書籍信息的XML文檔book.xml:
<?xml version="1.0"?>
<book bookid="123-4567-892">
<p>title:Breakfast</p>
<p>pubdate:2008-10-20</p>
</book>
這里<book>標(biāo)記是用戶自定義標(biāo)記,瀏覽器并不認(rèn)識,因此,它完全忽略。然而,<p></p>是標(biāo)準(zhǔn)的XML標(biāo)記,可以被瀏覽器理解,于是被正確處理。例如,在下列ASP文件代碼片段中嵌入了book.xml:
<%@language="vbscript"%>
…
<body>
<!--#include file="book.xml"-->
</body>
…
運行這個頁面,XML將被無縫嵌入,實現(xiàn)了服務(wù)器端嵌入XML數(shù)據(jù)。
(三)使用FileSystemObject訪問XML文檔。FileSystemObject是在ASP頁面中訪問文本文件的標(biāo)準(zhǔn)方法,由于XML文檔是基于文本的,所以,可以用它來打開文檔。雖然MSXML處理程序有一個用于打開XML文檔的load方法,可以代替FileSystemObject來完成相同的任務(wù),但是在有些場合,如沒有真正加載文檔的條件下,需要使用FileSystemObject來訪問XML文檔,并執(zhí)行一個操作,如檢查文件中的Attributes。
例如,一個簡單的文本搜索程序,簡化后的代碼如下:
dim fso,file,XMLStr,path
set fso=CreateObject("Scripting.FileSystemObject")
path=server.Mappath("book.xml")
set file=fso.OpenTextFile(path)
XMLStr=file.ReadAll
file.Close
if InStr(XMLStr,"Breakfast")>0 then
Response.write "Text is found!"
else
Response.write "Could not find the text!"
end if
set fso=nothing
(四)在客戶端創(chuàng)建數(shù)據(jù)島。數(shù)據(jù)島是服務(wù)器和客戶機之間進(jìn)行數(shù)據(jù)傳遞的一種方式。它存在于HTML網(wǎng)頁中,是一段XML代碼。XML數(shù)據(jù)島在HTML中形成了一個數(shù)據(jù)的集合,通過特定的標(biāo)簽把XML數(shù)據(jù)直接嵌入到HTML文檔中。數(shù)據(jù)島有特有的形式,由標(biāo)記<XML>開始,在開始標(biāo)記中要有一個ID屬性,用于指定該數(shù)據(jù)島的名稱,最后還要以</XML>結(jié)束。在客戶端創(chuàng)建數(shù)據(jù)島有兩種形式,一種為內(nèi)嵌的數(shù)據(jù)島,即直接把XML文檔片段嵌入ASP程序,下面代碼片段通過一個實例來實現(xiàn)內(nèi)嵌數(shù)據(jù)島:
<xml id="example">
<book bookid="123-4567-892">
<title>Breakfast</title >
<pubdate>2008-10-20</pubdate >
</book>
</xml>
<body>
<table datasrc="# example">
<tr>
<td><span DATAFLD="title"></span></td>
<td><span DATAFLD="pubdate"></span></td>
</tr>
</table>
</body>
如上例所示,用datasrc綁定數(shù)據(jù)島的時候,需要在已定義的數(shù)據(jù)島名稱前加“?!?,綁定具體元素時,用DATAFLD就可以了。另一種是外嵌的數(shù)據(jù)島,形式為:<xml id="example"src="book.xml"></xml>
外嵌數(shù)據(jù)島綁定元素的方法同內(nèi)嵌數(shù)據(jù)島是一樣的,只是在定義數(shù)據(jù)島的時候,需要指明嵌入的XML文件的路徑及名稱,具體實現(xiàn)代碼從略。
三、總結(jié)
本文詳細(xì)闡述了ASP讀取XML數(shù)據(jù)的四種方法的實現(xiàn)過程,當(dāng)然,方法不是只有這幾種,更多的方法需要我們進(jìn)一步探討和實踐,這樣我們才能更好的利用ASP、XML等相關(guān)的技術(shù)。
參考文獻(xiàn):
[1]吳潔,XML應(yīng)用教程,北京:清華大學(xué)出版社,2005.12.
[2]丁躍潮等,XML實用教程,北京:北京大學(xué)出版社,2006.10.
[3]尚俊杰,網(wǎng)絡(luò)程序設(shè)計-ASP,北京:清華大學(xué)出版社,2006.12.