接下來是很重要的部分,XSL的編寫了。
XSL文檔gbook.xsl 點(diǎn)擊這里查看XSL文檔gbook.xsl
在定義XSL名稱空間時,應(yīng)該用http://www.w3.org/1999/XSL/Transform,即
CODE: xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
而不能用http://www.w3.org/TR/WD-xsl,不知為什么如果使用這個名稱空間,在Firefox會顯示錯誤:分析 XSLT 樣式表單失敗。
在XSL里,一個很重要的概念就是模板。一個模板就對應(yīng)一塊內(nèi)容的格式化輸出,在構(gòu)建模板時,可以從大到小,即先構(gòu)建全局的模板,然后再處理每一塊細(xì)分的內(nèi)容,也可以從小到大,先構(gòu)建好細(xì)分內(nèi)容的模板,然后將它們組合起來形成整體的模板。在XSL里,創(chuàng)建一個模板使用下面的標(biāo)記: [code[<xsl:template match="/gbook"> <!-- 模板內(nèi)容 --> </xsl:template>[/code] 其中match表示的是這個模板對應(yīng)那個標(biāo)記。
使用模板有兩種方法:
第一種是直接應(yīng)用:
CODE: <xsl:apply-templates select="info"/>
這種方法是選擇當(dāng)前標(biāo)記下的info標(biāo)記并使用match為info的模板進(jìn)行處理
第二種是循環(huán)選擇:
CODE: <xsl:for-each select="message"> <!-- 模板內(nèi)容 --> </xsl:for-eace>
在循環(huán)選擇中,模板直接寫在for-each之中,但是當(dāng)前上下文已經(jīng)轉(zhuǎn)到message。
至于在select中使用的表達(dá)式,屬于XPath部分,可以參考W3C的XPath文檔(XML Path Language) 。在gbook.xsl中還使用到的標(biāo)記有:
<xsl:value-of select="content"/> 這是在XSL中常用的標(biāo)記之一,輸出結(jié)果是選擇節(jié)點(diǎn)的值,通過用它來輸出節(jié)點(diǎn)的值,在這個留言本中,它用來輸出用戶名、留言者姓名、留言內(nèi)容等。
<xsl:attribute name="href">gbook.asp?page=1</xsl:attribute> 用來給當(dāng)前標(biāo)簽添加一個屬性,在留言簿中用來給分頁導(dǎo)航添加網(wǎng)址。其中name]屬性表示要添加屬性的名字,標(biāo)記包含的內(nèi)容為要添加屬性的值。
<xsl:if test="id!=''"><!-- 處理內(nèi)容 --></xsl:if> 判斷test中的表達(dá)示結(jié)果,如果為真則處理包含的內(nèi)容,假則忽略。要注意是,如果是判斷小于,就不能用“<”,而應(yīng)該用“<”,因?yàn)椤?lt;”是標(biāo)簽起始標(biāo)志,如果不進(jìn)行轉(zhuǎn)換則在瀏覽器中會出現(xiàn)錯誤。
然后就是ASP輸出留言簿需要的XML文檔了,這個只要按照前面定義的格式,從數(shù)據(jù)庫中讀取記錄按照模板輸出即可,不過需要在輸出之前定義MIME類型: Response.ContentType="application/xml" 指明這是一個XML文檔。另外,因?yàn)檎麄留言簿都使用的UTF-8編碼,需要在ASP中指定編碼: CodePage="65001" 這句應(yīng)該放在ASP文件的開頭。
最后還有CSS,這個屬于定義留言簿的顯示效果了,具體可以查看CSS的內(nèi)容。另外,為了防止用戶誤操作提交了空表單,我在客戶端加了一段JS代碼來檢查留言姓名和留言內(nèi)容是否為空,如果為空則提示用戶并停止提交表單,具體內(nèi)容可以查看JS腳本文件。
完整留言簿系統(tǒng)SXGB打包下載
參考資料: 1. XML及WAP開發(fā)手冊(李建國等編著) 2. xml ,xsl,css 之亂搞
經(jīng)典論壇討論: http://bbs.blueidea.com/thread-2658533-1-2.html
出處:藍(lán)色理想
責(zé)任編輯:moby
上一頁 XML+XSL+CSS+ASP打造留言簿 [1] 下一頁
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|