亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

XML+XSL+CSS+ASP打造留言簿

 更新時(shí)間:2006年07月20日 00:00:00   投稿:mdxy-dxy  
這篇文章主要介紹了XML+XSL+CSS+ASP打造留言簿,需要的朋友可以參考下

前段時(shí)間無(wú)意間看到一個(gè)博客的RSS可以用XSL格式輸出并且能在Firefox里瀏覽,想到自己以前寫(xiě)的一個(gè)XML留言簿因?yàn)椴患嫒軫irefox所不了了之了,現(xiàn)在看到他的能在Firefox瀏覽就覺(jué)得很好奇,看了一下代碼,一句一句的比對(duì),最后終于找到了原因,也就把這個(gè)留言簿給完成了。因?yàn)槭且粋€(gè)簡(jiǎn)單的XML留言簿,所以取名SXGB(Simple XML GuestBook)。

留言本演示,管理密碼為test:http://home.goofar.com/hotheart/gbook/gbook.asp

首先定義留言簿的XML文檔的格式。作為一個(gè)留言簿,不需要太復(fù)雜的內(nèi)容,于是我就給留言內(nèi)容分為3個(gè)部分:留言者姓名、留言者主頁(yè)和留言內(nèi)容。另外,一個(gè)留言簿還需要有使用者的一些信息,包括用戶名和用戶主頁(yè)。再有,在留言比較多時(shí)還需要分頁(yè)信息。大致結(jié)構(gòu)完成后就可以開(kāi)始寫(xiě)XML文檔模板了。

XML文檔根元素定義為gbook
XML文檔模板gbook.xml

CODE:
xml version="1.0" encoding="utf-8"?>
<!-- DTD file -->
<!DOCTYPE gbook SYSTEM "sxgb.dtd">
<!-- XSL file -->
<?xml-stylesheet type="text/xsl" href="gbook.xsl"?>
<gbook>
<!-- 留言簿相關(guān)信息 -->
<info>
<!-- 用戶名 -->
<user>HotHeart</user>
<!-- 用戶主頁(yè) -->
<home>http://www.xujiwei.cn</home>
<!-- 分頁(yè)信息,分別為目前所在頁(yè),總頁(yè)數(shù),上一頁(yè),下一頁(yè) -->
<pagenow>1</pagenow>
<pagetotal>1</pagetotal>
<pageprev>1</pageprev>
<pagenext>2</pagenext>
<!-- 是否已經(jīng)登陸,用來(lái)處理是否顯示登陸框 -->
<logined>NO</logined>
</info>
<!-- 留言列表 -->
<messages>
<!-- 一個(gè)留言 -->
<message>
<!-- 留言ID -->
<id>1</id>
<!-- 留言者姓名 -->
<username>Admin</username>
<!-- 留言時(shí)間 -->
<time>2005-08-09 12:00</time>
<!-- 留言者主頁(yè) -->
<homepage>http://www.xujiwei.cn/</homepage>
<!-- 留言內(nèi)容 -->
<content><![CDATA[ 留言內(nèi)容 ]]></content>
</message>
</messages>
</gbook>

要注意在引用XSL時(shí)不能用
<?xml:stylesheet type="text/xsl" href="gbook.xsl"?>
xml和stylesheet之間應(yīng)該用一杠(-)而不能用冒號(hào)(:),在Firefox里是不支持用冒號(hào)的。

一個(gè)好的XML文檔,除了要有結(jié)構(gòu)性,還應(yīng)該要有有效性,所以在XML文檔的一開(kāi)頭就定義了文檔類型定義(DTD) sxgb.dtd,下面就來(lái)把這個(gè)文檔類型定義給完成。因?yàn)橐呀?jīng)設(shè)計(jì)好留言簿XML文檔的結(jié)構(gòu),所以寫(xiě)出DTD是很方便的。

文檔類型定義sxgb.dtd

CODE:
<?xml version="1.0" encoding="utf-8"?>
<!ELEMENT gbook (info,messages)>
<!ELEMENT info (user,home,msgtotal,pagenow,pagetotal,pageprev,pagenext,logined)>
<!ELEMENT messages (message+)>
<!ELEMENT message (id,username,time,homepage,content)>
<!ELEMENT user (#PCDATA)>
<!ELEMENT home (#PCDATA)>
<!ELEMENT msgtotal (#PCDATA)>
<!ELEMENT pagenow (#PCDATA)>
<!ELEMENT pagetotal (#PCDATA)>
<!ELEMENT pageprev (#PCDATA)>
<!ELEMENT pagenext (#PCDATA)>
<!ELEMENT logined (#PCDATA)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT username (#PCDATA)>
<!ELEMENT time (#PCDATA)>
<!ELEMENT homepage (#PCDATA)>
<!ELEMENT content (#PCDATA)>

<!ELEMENT messages (message+)>中+號(hào)表示留言列表中至少有一條留言,但實(shí)際應(yīng)用可能會(huì)出現(xiàn)沒(méi)有留言的情況,為了應(yīng)對(duì)這種情況,我在輸出XML文檔的ASP程序輸出一條系統(tǒng)產(chǎn)生的留言,提示目前還沒(méi)有留言。

接下來(lái)是很重要的部分,XSL的編寫(xiě)了。

XSL文檔gbook.xsl
點(diǎn)擊這里查看XSL文檔gbook.xsl

在定義XSL名稱空間時(shí),應(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,不知為什么如果使用這個(gè)名稱空間,在Firefox會(huì)顯示錯(cuò)誤:分析 XSLT 樣式表單失敗。

在XSL里,一個(gè)很重要的概念就是模板。一個(gè)模板就對(duì)應(yīng)一塊內(nèi)容的格式化輸出,在構(gòu)建模板時(shí),可以從大到小,即先構(gòu)建全局的模板,然后再處理每一塊細(xì)分的內(nèi)容,也可以從小到大,先構(gòu)建好細(xì)分內(nèi)容的模板,然后將它們組合起來(lái)形成整體的模板。在XSL里,創(chuàng)建一個(gè)模板使用下面的標(biāo)記:
[code[<xsl:template match="/gbook">
<!-- 模板內(nèi)容 -->
</xsl:template>[/code]
其中match表示的是這個(gè)模板對(duì)應(yīng)那個(gè)標(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)選擇中,模板直接寫(xiě)在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)的值,通過(guò)用它來(lái)輸出節(jié)點(diǎn)的值,在這個(gè)留言本中,它用來(lái)輸出用戶名、留言者姓名、留言內(nèi)容等。

<xsl:attribute name="href">gbook.asp?page=1</xsl:attribute>
用來(lái)給當(dāng)前標(biāo)簽添加一個(gè)屬性,在留言簿中用來(lái)給分頁(yè)導(dǎo)航添加網(wǎng)址。其中name]屬性表示要添加屬性的名字,標(biāo)記包含的內(nèi)容為要添加屬性的值。

<xsl:if test="id!=''"><!-- 處理內(nèi)容 --></xsl:if>
判斷test中的表達(dá)示結(jié)果,如果為真則處理包含的內(nèi)容,假則忽略。要注意是,如果是判斷小于,就不能用“<”,而應(yīng)該用“&lt;”,因?yàn)?ldquo;<”是標(biāo)簽起始標(biāo)志,如果不進(jìn)行轉(zhuǎn)換則在瀏覽器中會(huì)出現(xiàn)錯(cuò)誤。

然后就是ASP輸出留言簿需要的XML文檔了,這個(gè)只要按照前面定義的格式,從數(shù)據(jù)庫(kù)中讀取記錄按照模板輸出即可,不過(guò)需要在輸出之前定義MIME類型:
Response.ContentType="application/xml"
指明這是一個(gè)XML文檔。另外,因?yàn)檎麄€(gè)留言簿都使用的UTF-8編碼,需要在ASP中指定編碼:
CodePage="65001"
這句應(yīng)該放在ASP文件的開(kāi)頭。

最后還有CSS,這個(gè)屬于定義留言簿的顯示效果了,具體可以查看CSS的內(nèi)容。另外,為了防止用戶誤操作提交了空表單,我在客戶端加了一段JS代碼來(lái)檢查留言姓名和留言內(nèi)容是否為空,如果為空則提示用戶并停止提交表單,具體內(nèi)容可以查看JS腳本文件。

完整留言簿系統(tǒng)SXGB打包下載

參考資料:
1. XML及WAP開(kāi)發(fā)手冊(cè)
2. xml ,xsl,css 之亂搞

相關(guān)文章

最新評(píng)論