答案:坦白地说,对于ASP我一直都不怎么感兴趣。如果要我写这种服务器端程序的话,
我会选择JSP。所以,本人一直都想在网上弄个便宜点的JSP空间;可是正如miles
前辈所说,连贵一点的都没有,更不用说便宜的了。没办法,只好用ASP了,
对于用ASP写留言板的主要途径,只要是地球人就都知道,用得最多的无外乎就
是文件组件与数据库组件;而大多提供ASP的服务商基于安全都禁用了文件组件,
也有的禁用了数据库组件。当然,就算用不了这两个组件,也并不代表我们就不
能用脚本来创建文件和修改文件了,我们还有第三种途径:MSXML组件。
以下是我用MSXML组件写的一个留言本程序,主要文件有guest.xml、guest.asp、
include.asp、certain.asp,另加一些图像文件,分别为1.jpg,2.jpg,……图像
文件放在pic目录下。这个脚本在ASP的各版本中均已测试通过,以下是所有的源
代码与讲解,肯请指正。
----------------------------------------------------------------------
◆1◆ guest.xml 该文件用来保存留言的数据文件,相当于数据库。
----------------------------------------------------------------------
<?xml version="1.0" encoding="gb2312"?>
<殷亮的留言本>
<留言>
<昵称>殷亮</昵称>
<头像>pic/20.jpg</头像>
<来自>湖北荆门</来自>
<时间>2002-10-17 22:48:01</时间>
<信箱>ask10@msn.com</信箱>
<内容>这是一个基于XML的留言本</内容>
</留言>
<留言>
<昵称>黄娟</昵称>
<头像>pic/7.jpg</头像>
<来自>湖北武汉</来自>
<时间>2002-10-17 22:48:01</时间>
<信箱>fengzhongluwei@hotmail.com</信箱>
<内容>你好吗?</内容>
</留言>
</殷亮的留言本>
-------------------------------------------------------------------------
上面的XML文件记录了两条留言,可以用任何文本编辑工具编辑,如果没有语法错误,
在浏览器中输入该文件名即可显示XML所独有的树状页面。因为是文本形式的,所以
从创建到修改都比专门的数据库要方便。而XML文档的规则与格式也非常自由,如果
你要创建一个新的XML文件,只需一字不改地照写第一行“<?xml version="1.0"
encoding="gb2312"?>”,而后面的标签与标签之间的text就可以很随意,仅仅遵守
以下规则即可:
1.首标签与尾标签必须对应,可以重复,但不可以嵌套。
2.标签的命名规则与JAVA/C/C++等程序语言的变量命名规则相似,区分大小写。
3.一个文档只能有一个根元素,如实例中的“<殷亮的留言本>”
4.唯一的关键字“XML”,标签不能以这三个字母开头。
如果文档与规则有所冲突,将导制XML文档在浏览器中无易做图常显示,且当ASP脚本调
用该文档时也会出现错误,所以强烈建议将写好的XML文件先在浏览器中预览,没有
发现错误时,再开始编写ASP脚本。
下面是关于ASP中读写XML文件的相关语句:(以上面的XML文件为例)
应用组件,读入文件:
set guestXml = Server.CreateObject("MSXML.DOMDocument")
guestXml.load Server.MapPath("guest.xml")
显示第一条留言中的“殷亮”
<%=guestXml.documentelement.childNodes.item(0).childNodes.item(0).text%>
可以解释为:XML对象.XML根标签.子标签集合.第一条.子标签集合.第一条.文本
这样,通过一级一级的访问,最终定位到了第易做图标签上。
当然,我们也可以先用 set root = guestXml.documentelement.childNodes
这样,当我们要显示“殷亮”的时候,就可以用:
<%=root.item(0).childNodes.item(0).text%>
显示第二条留言中的“湖北武汉”
<%=guestXml.documentelement.childNodes.item(1).childNodes.item(2).text%>
和数组类似,XML的下标也是由0开始。
显示一个标签中所有子标签的个数,如显示留言总数:
<%=guestXml.documentelement.childNodes.length%>
显示第一条留言中的项目数:
<%=guestXml.documentelement.childNodes.item(0).childNodes.length%>
对文件修改后,保存XML文件,使修改生效:
<%guestXml.save%>
在第一条留言中添加一个子标签“<主题>a test</主题>”
<%
set titleTag = guestXml.createelement("主题") ''''先创建一个标签
titleTag.text= "a test" '''''设定标签中的文本
guestXml.documentelement.childNodes.item(1).appendchild titleTag
'''''添加到指定的标签下
guestXml.save
%>
当你再次打开guest.xml文件时,你会发现添加已经成功。
MSXML对象的相关语法不止这些,但有了这几个关键的,已经足够我们写留言本了。
--------------------------------------------------------------------------
◆2◆ guest.asp 该文件为留言本的主页面,包括显示留言的总数与总页数
--------------------------------------------------------------------------
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<% '使浏览器每次都从服务器载入网页
Response.Expires = -1
Response.AddHeader "Pragma","no-cache"
Response.AddHeader "cache-control","no-store"
%>
<html>
<head>
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">
<!--
A:link {text-decoration:none;color:#000000}
A:active {TEXT-DECORATION:none;color:#CC33FF}
A:visited {TEXT-DECORATION:none;color:#000000}
A:hover {TEXT-DECORATION:underline overline;color:#CCCCFF}
p, br, body, td, select, input, form, textarea, option{ font-family: 宋体; font-size: 9pt }
.input1 { font-size: 9pt; height: 18px; border: 1px #000000 solid; background-color: #CCCCFF}
.input2 { font-size: 9pt; height: 16px; border: 1px #000000 solid; background-color: #CCCCFF}
--></style>
<title>【殷亮的留言本】谨以此留言板献给WISHES</title>
</head>
<body bgcolor="#cc33ff">
<center>
<table border="1" cellpadding="0" cellspacing="0" style="BORDER-COLLAPSE: collapse" bordercolor="#111111" width="750" id="AutoNumber3" height="45">
<tr>
<td width="100%" bgcolor="#9933ff" align="middle" height="21" colspan="2" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"> 【
殷 亮 的 留 言 本 】</td>
</tr>
<% '''''打开数据文件test.xml
set guestXml = Server.CreateObject("MSXML.DOMDocument")
guestXml.load Server.MapPath("guest.xml")
set root = guestXml.documentelement.childNodes
num = root.length '''''获得留言总数
%>
<tr>
<td width="77%" bgcolor="#9933ff" align="left" height="21" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">
<%
for i=1 to (num-1)\5+1 '''''因为是每5条留言为1页,所以总页数就是(num-1)\5+1
Response.Write("<a href=> Response.Write(" 第 "&i&" 页 |") '''''通过此循环便制定了一个页间的导航。
Response.Write("</a>") '''''相当于HTML代码 <a href=> next
%>
</td>
<td width="23%" bgcolor="#9933ff" align="middle" height="21" style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体"> <A href=> | <label id=lab1 onclick="window.scroll(0,70)">书写留言</label></td>
</tr>
</table>
上一个:用XML结合数据库,给服务器减负
下一个:用XMLHTTPRequest对象进行客户端验证