吳永光 王曉巖
[摘要]ASP讀取XML數據是開發過程中經常遇到的一個難題,具體介紹ASP讀取XML數據的實現方法。
[關鍵詞]ASP 讀取 XML 方法
中圖分類號:TP3文獻標識碼:A文章編號:1671-7597(2009)0510032-01
一、引言
ASP是Web服務器端的開發環境,利用它可以產生和執行動態的、互動的、高性能的Web服務應用程序,在ASP文件中訪問數據庫是最常用的操作,而擴展標記語言XML從本質上看就是數據庫,它是自描述性的,可交換的,能夠以樹狀或圖形結構描述數據。用XML文件存取數據,可以減少額外的服務器負荷,而且XML文件編寫、備份和下載都很容易。ASP讀取XML數據有多種方法。
二、ASP讀取XML數據的方法
(一)創建MSXML對象,并且將XML文檔載入DOM。為了在ASP中使用DOM,需要創建一個DOM對象,然后加載XML文檔。在XML文檔加載之前,需設置validateOnParse屬性為true,這可確保被加載的文檔為有效的XML文檔,從而可以避免后面遇到的各種麻煩,實例代碼片段如下:
Set objxml=Server.CreateObject("MicrosoftXMLDOM")
Objxml.validateOnParse=true
Objxml.load(Server.Mappath("example.xml"))
Set objrootelement=objxml.documentElement
(二)使用服務器端嵌入。服務器端嵌入可用于將XML文檔代碼插入ASP頁面,如同處理任何其它基于文本的文檔一樣。使用這種方法的唯一問題是,XML代碼不是在服務器端分析,而是作為XML直接發送至客戶端。如果有意在客戶端創建一個XML數據島,這種方法是可以接受的。但在大多數情況下,瀏覽器忽略這種標記,因此,分析結果將毫無用處。
一個例外情形是,SSI代碼是用HTML標記組成的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>標記是用戶自定義標記,瀏覽器并不認識,因此,它完全忽略。然而,<p></p>是標準的XML標記,可以被瀏覽器理解,于是被正確處理。例如,在下列ASP文件代碼片段中嵌入了book.xml:
<%@language="vbscript"%>
…
<body>
<!--#include file="book.xml"-->
</body>
…
運行這個頁面,XML將被無縫嵌入,實現了服務器端嵌入XML數據。
(三)使用FileSystemObject訪問XML文檔。FileSystemObject是在ASP頁面中訪問文本文件的標準方法,由于XML文檔是基于文本的,所以,可以用它來打開文檔。雖然MSXML處理程序有一個用于打開XML文檔的load方法,可以代替FileSystemObject來完成相同的任務,但是在有些場合,如沒有真正加載文檔的條件下,需要使用FileSystemObject來訪問XML文檔,并執行一個操作,如檢查文件中的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
(四)在客戶端創建數據島。數據島是服務器和客戶機之間進行數據傳遞的一種方式。它存在于HTML網頁中,是一段XML代碼。XML數據島在HTML中形成了一個數據的集合,通過特定的標簽把XML數據直接嵌入到HTML文檔中。數據島有特有的形式,由標記<XML>開始,在開始標記中要有一個ID屬性,用于指定該數據島的名稱,最后還要以</XML>結束。在客戶端創建數據島有兩種形式,一種為內嵌的數據島,即直接把XML文檔片段嵌入ASP程序,下面代碼片段通過一個實例來實現內嵌數據島:
<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綁定數據島的時候,需要在已定義的數據島名稱前加“#”,綁定具體元素時,用DATAFLD就可以了。另一種是外嵌的數據島,形式為:<xml id="example"src="book.xml"></xml>
外嵌數據島綁定元素的方法同內嵌數據島是一樣的,只是在定義數據島的時候,需要指明嵌入的XML文件的路徑及名稱,具體實現代碼從略。
三、總結
本文詳細闡述了ASP讀取XML數據的四種方法的實現過程,當然,方法不是只有這幾種,更多的方法需要我們進一步探討和實踐,這樣我們才能更好的利用ASP、XML等相關的技術。
參考文獻:
[1]吳潔,XML應用教程,北京:清華大學出版社,2005.12.
[2]丁躍潮等,XML實用教程,北京:北京大學出版社,2006.10.
[3]尚俊杰,網絡程序設計-ASP,北京:清華大學出版社,2006.12.