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

2016-02-19 10:10 14 1 收藏

每个人都希望每天都是开心的,不要因为一些琐事扰乱了心情还,闲暇的时间怎么打发,关注图老师可以让你学习更多的好东西,下面为大家推荐XML+XSL+CSS+ASP打造留言簿,赶紧看过来吧!

【 tulaoshi.com - Web开发 】

前段时间无意间看到一个博客的RSS可以用XSL格式输出并且能在Firefox里浏览,想到自己以前写的一个XML留言簿因为不兼容Firefox所不了了之了,现在看到他的能在Firefox浏览就觉得很好奇,看了一下代码,一句一句的比对,最后终于找到了原因,也就把这个留言簿给完成了。因为是一个简单的XML留言簿,所以取名SXGB(Simple XML GuestBook)。

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

首先定义留言簿的XML文档的格式。作为一个留言簿,不需要太复杂的内容,于是我就给留言内容分为3个部分:留言者姓名、留言者主页和留言内容。另外,一个留言簿还需要有使用者的一些信息,包括用户名和用户主页。再有,在留言比较多时还需要分页信息。大致结构完成后就可以开始写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
!-- 留言簿相关信息 --
info
!-- 用户名 --
userHotHeart/user
!-- 用户主页 --
homehttp://www.xujiwei.cn/home
!-- 分页信息,分别为目前所在页,总页数,上一页,下一页 --
pagenow1/pagenow
pagetotal1/pagetotal
pageprev1/pageprev
pagenext2/pagenext
!-- 是否已经登陆,用来处理是否显示登陆框 --
loginedNO/logined
/info
!-- 留言列表 --
messages
!-- 一个留言 --
message
!-- 留言ID --
id1/id
!-- 留言者姓名 --
usernameAdmin/username
!-- 留言时间 --
time2005-08-09 12:00/time
!-- 留言者主页 --
homepagehttp://www.xujiwei.cn//homepage
!-- 留言内容 --
content![CDATA[ 留言内容 ]]/content
/message
/messages
/gbook

要注意在引用XSL时不能用
?xml:stylesheet type="text/xsl" href="gbook.xsl"?
xml和stylesheet之间应该用一杠(-)而不能用冒号(:),在Firefox里是不支持用冒号的。

一个好的XML文档,除了要有结构性,还应该要有有效性,所以在XML文档的一开头就定义了文档类型定义(DTD) sxgb.dtd,下面就来把这个文档类型定义给完成。因为已经设计好留言簿XML文档的结构,所以写出DTD是很方便的。

文档类型定义sxgb.dtd

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

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)

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

!ELEMENT messages (message+)中+号表示留言列表中至少有一条留言,但实际应用可能会出现没有留言的情况,为了应对这种情况,我在输出XML文档的ASP程序输出一条系统产生的留言,提示目前还没有留言。

接下来是很重要的部分,XSL的编写了。

XSL文档gbook.xsl
点击这里查看XSL文档gbook.xsl

在定义XSL名称空间时,应该用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里,一个很重要的概念就是模板。一个模板就对应一块内容的格式化输出,在构建模板时,可以从大到小,即先构建全局的模板,然后再处理每一块细分的内容,也可以从小到大,先构建好细分内容的模板,然后将它们组合起来形成整体的模板。在XSL里,创建一个模板使用下面的标记:
[code[xsl:template match="/gbook"
!-- 模板内容 --
/xsl:template[/code]
其中match表示的是这个模板对应那个标记。

使用模板有两种方法:

第一种是直接应用:

CODE:
xsl:apply-templates select="info"/

这种方法是选择当前标记下的info标记并使用match为info的模板进行处理

第二种是循环选择:

CODE:
xsl:for-each select="message"
!-- 模板内容 --
/xsl:for-eace

在循环选择中,模板直接写在for-each之中,但是当前上下文已经转到message。

至于在select中使用的表达式,属于XPath部分,可以参考W3C的XPath文档(XML Path Language) 。在gbook.xsl中还使用到的标记有:

xsl:value-of select="content"/
这是在XSL中常用的标记之一,输出结果是选择节点的值,通过用它来输出节点的值,在这个留言本中,它用来输出用户名、留言者姓名、留言内容等。

xsl:attribute name="href"gbook.asp?page=1/xsl:attribute
用来给当前标签添加一个属性,在留言簿中用来给分页导航添加网址。其中name]属性表示要添加属性的名字,标记包含的内容为要添加属性的值。

xsl:if test="id!=''"!-- 处理内容 --/xsl:if
判断test中的表达示结果,如果为真则处理包含的内容,假则忽略。要注意是,如果是判断小于,就不能用“”,而应该用“”,因为“”是标签起始标志,如果不进行转换则在浏览器中会出现错误。

然后就是ASP输出留言簿需要的XML文档了,这个只要按照前面定义的格式,从数据库中读取记录按照模板输出即可,不过需要在输出之前定义MIME类型:
Response.ContentType="application/xml"
指明这是一个XML文档。另外,因为整个留言簿都使用的UTF-8编码,需要在ASP中指定编码:
CodePage="65001"
这句应该放在ASP文件的开头。

最后还有CSS,这个属于定义留言簿的显示效果了,具体可以查看CSS的内容。另外,为了防止用户误操作提交了空表单,我在客户端加了一段JS代码来检查留言姓名和留言内容是否为空,如果为空则提示用户并停止提交表单,具体内容可以查看JS脚本文件。

完整留言簿系统SXGB打包下载

参考资料:
1. XML及WAP开发手册(李建国等编著)
2. xml ,xsl,css 之乱搞

来源:http://www.tulaoshi.com/n/20160219/1593687.html

延伸阅读
标签: ASP
  在前面我们介绍了文件版本的留言簿,现在我们不妨来设想一下:如果留言文件里面的留言很多,而你又急于想寻找其中的某条留言时,这时打开txt留言文件,对着一段段的留言记录,你敢担保你不会当场晕倒吗?而且文件留言簿最令人讨厌还远不只是这个原因,更气人的是:譬如你已经找到了你要找的留言,而且是非要将其删除不可(当然是因为那...
标签: ASP
  从本章开始我们将由一个简单的,利用文件储存访问留言的留言簿程序进入我们的教程。编写这样一个留言簿,我们大致可以从以下三个步骤来完成。 步骤一:先设计一个留言表单的网页(如:guestbook1.asp,这不用我在这儿说教了吧?)。见下图:   步骤二:在设计好留言表单后,我们开始进行编写处理留言的ASP程序。 我们...
标签: ASP
在前面我们介绍了文件版本的留言簿,现在我们不妨来设想一下:如果留言文件里面的留言很多,而你又急于想寻找其中的某条留言时,这时打开txt留言文件,对着一段段的留言记录,你敢担保你不会当场晕倒吗?而且文件留言簿最令人讨厌还远不只是这个原因,更气人的是:譬如你已经找到了你要找的留言,而且是非要将其删除不可(当然是因为那段留...
标签: PHP
  需要一个 text.txt 文本文件 ,对内容字符作了一定的处理。   <html   <head   <meta http-equiv="Content-Type" content="text/html; charset=gb2312"   </head   <body bgcolor="#FF9966"   <p align="center&qu...
标签: Web开发
在前面我们介绍了文件版本的留言簿,现在我们不妨来设想一下:如果留言文件里面的留言很多,而你又急于想寻找其中的某条留言时,这时打开txt留言文件,对着一段段的留言记录,你敢担保你不会当场晕倒吗?而且文件留言簿最令人讨厌还远不只是这个原因,更气人的是:譬如你已经找到了你要找的留言,而且是非要将其删除不可(当然是因为那段留言...

经验教程

202

收藏

9

精华推荐

支持oicq头像的留言簿(二)

支持oicq头像的留言簿(二)

iveerson_0420

支持oicq头像的留言簿(一)

支持oicq头像的留言簿(一)

蕃茄家家家

配置Web应用环境实现JSP留言簿

配置Web应用环境实现JSP留言簿

cycr999

微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部