20编程21编程爱好者22vb编程,23数控编程24编程中国25编程论坛26编程语言27游戏编程28编程软件下载29编程工具30socket编程31网络编程32编程器33c语言编程,34flash编程35编程软件36数控车床编程37windows编程38编程入门,39windows核心编程40cnc编程41vc 编程,42linux 编程43asp编程44vb编程实例45串口编程46手机编程47编程教程48plc编程,49单片机编程50vc 网络编程51excel编程,52unix网络编程53编程学习,54编程之道55数据库编程56单片机编程器57黑客编程58计算机编程59网页编程60嵌入式编程,61编程高手箴言62flash编程教程63vfp编程64windows网络编程,65编程基础66c语言编程实例67c语言编程软件68vf编程69shell编程,70vb数据库编程71matlab编程,72c语言编程工具73编程思想74php编程,75c编程76jsp编程77电脑编程技巧与维护,78三菱plc编程软件,79vb编程软件下载80pb编程81数控编程实例82asp编程工具,83c专家编程,84win32编程85数控铣床编程86asp.net高级编程,,87vc 数据库编程88vba编程89jsp高级编程90c语言编程宝典,91unix环境高级编程;92编程珠玑93delphi编程94delphi数据库编程95vb编程教程96单片机编程软件
1编程爱好者网站2vb编程网站,3电子商务网站编程4游戏编程网站5最大的编程网站6网站编程软件7可编程逻辑中文网站8网站 编程 语言9网站编程 数据库,10jsp网站编程11asp编程网站12网站编程电子书13好的编程网站,14c语言编程网站15编程门户网站16如何学习网站编程17百度网站的编程语言18vb编程乐园网站指南19wince 编程网站
1asp.net2asp教程,3asp源码4asp免费空间5asp论坛6asp代码7asp源代码8asp下载,9asp源码下载10asp木马11asp.net教程12asp学习13什么是asp14asp空间,15admin.asp dir16asp程序17asp教程下载18asp.net 2.019asp整站程序,20asp文件21十天学会asp22asp入门23asp源程序24asp实例25asp函数26asp服务器27asp.net论坛28asp id,29asp整站下载30asp网站31asp论坛下载32asp源代码下载,33asp整站34asp技术35asp access36asp.net源码37asp简介38asp免费空间申请39asp.net下载,40asp留言板41asp sql42asp 数据库43asp站长助手44asp连接数据库45asp留言本,46asp.net教程下载47asp分页48asp格式49asp论坛程序50asp.net源代码51asp软件52asp模板53asp session54asp语法,55如何打开asp文件56asp解密57asp编程58asp.net实例,59asp实例教程60asp程序下载61asp计数器62asp.net入门,63asp运行环境64asp基础教程65apache asp66asp入门教程,67asp编辑器68asp组件69asp连接access70conn.asp71asp书籍,72asp论文73asp工具74asp文件上传75asp探针76asp原代码下载77asp include78user wantpws.asp79asp split,80asp fso81asp网页制作82printpage.asp83什么是asp.net,84index.asp85asp.net datagrid86asp基础87asp replace88asp代码下载89asp新闻系统
1php论坛2免费php空间,3php下载4php源码5php mysql6php教程7php文件8php空间9apache php10什么是php11apache php mysql12php学习13php论坛下载14iis php15php cms16php入门17php blog18php手册,19php代码20php整站程序21php session22php安装23php源码下载24php配置25php源代码26php cookie27php网站28iis php mysql29php编程30php留言板31php探针32php注入33php.ini34php运行环境35index.php36php教程下载,37php论坛程序38php 文件上传39php服务器40php环境41php 函数;42php格式43php编辑器44php editor45如何打开php文件46php access47十天学会php48php模板49php xml;50php程序51php留言本52php文件怎么打开53php技术54ajax php55php简介56php注入工具57打开php文件58php语言59php mail;60php软件;61免费php mysql空间62php self63php 数组.64php分页,65php nuke66php阅读器67免费php空间申请68国外免费php空间69php程序下载70php 正则表达式71asp php,72php网站管理系统73php程序设计74php是什么文件75php 实例76php 开发工具77php 验证码78php官方网站79php学习资料
1jsp教程2jsp源码3jsp论坛4什么是jsp5jsp源代码6jsp空间7jsp学习8jsp文件9jsp mysql,10jsp入门11jsp连接数据库12jsp技术13eclipse jsp14jsp分页15jsp源代码下载16jsp access17jsp教程下载18jsp开发工具,19jsp代码20jsp简介21jsp环境配置22jsp连接mysql,23jsp实例24免费jsp空间25jsp配置26jsp session,27jsp运行环境28jsp下载29jsp网站30jsp include31jsp编程,32jsp介绍33jsp 数据库34jsp设计35jsp servlet36jsp标签37jsp应用开发详解38jsp 中文39jsp oracle40jsp论文41jsp 文件上传,42jsp高级编程43jsp源码下载44jsp 乱码45jsp开发46jsp分页显示47jsp sql48jsp连接sql49jsp 页面跳转50jsp request51eclipse开发jsp52iis jsp53jsp开发环境54jsp sqlserver,55jsp cookie56jsp服务器57jsp连接access58jsp毕业论文59jsp新闻发布系统60jsp留言板61jsp 电子书62jsp forward63jsp中文网64tomcat jsp65jsp语法66jsp留言本67asp jsp,68jsp import69jsp源程序70jsp基础71jsp毕业设计,72jsp格式73jsp 中文乱码,74jsp开发实例75jsp书籍76jsp论坛下载77jsp 上传,78jsp计数器79jsp 注释80jsp电子教程81jsp 保存用户名密码,82jsp的优点83jsp软件下载84jsp语言85jsp代码下载86jsp blog87jsp 打印88jsp手册

思顿科技-专业网站制作指南、网页设计制作教程、免费网页制作素材下载、免费学习网页制作指南,专业网站建设服务、网站制做指南、免费网页制作指南、网页制作服务、免费空间域名服务、
首页
网页教程
网页素材
收录查询
工具下载
网站欣赏
网站论坛
免费博客
建站服务

ASP.NET+XML实现无数据库论坛一点即通
你当前的位置:网站制作指南 --> 技术文档全集 (www.STasp.com)

起草语:流行论坛(我们重点讨论ASP,ASP。NET论坛)的开发思路

老手可略过此节,就读下节。

目前,网上论坛各式各样各种版本不计其数,归根结底如何神通其核心数据存取仓库都是“数据库”,我是指我们常用的ACCESS SQLSERVER等等这种形式的“数据库”,而后由PHP ASP ASP。NET JSP等等这些后台语言通过中心“ADO,SQL”两条线,像伐木搭桥似的一小块一小块(会员注册、会员登陆、论坛栏目分类、项目统计、单个栏目、帖子浏览、后台管理……)积木似的累积成形式各异的论坛系统,而这一块块的“积木”,如何异样然终归就是对数据库的存取其成分无非就是构成木料的物质不会变成铁的,可见,好的论坛程序并不难写,难得是清晰的思路、优质的“数据库结构”,既然是这样,下面我就将本人着手开发ASP。NET+XML无数据库实现论坛总结的一些经验思路一一陈述,读毕若有兴趣不妨自己动手一试,尝试一下用全新的手段开发论坛的乐趣

第一节:废话不说、解答疑问

1:这篇文章需熟悉哪些知识的人才能读懂?
至少从事学习一年以上WEB后台网站编程综合知识的人即可读懂,熟悉ASP。NET编程及XML文档结构的程序员更能深入意会
2:XML能充当“数据库”吗?
能,只不过是不同的概念和组织形式
3:用XML充当数据库制作论坛的开发难度是否比使用ACCESS、SQLSERVER等为数据库的开发难度高?
高许多,甚至有些功能本人水平有限无从下手解决(XML充当数据库相比ACCESS等有一定本质上的局限),但并不代表不可能
4:本文为什么选择ASP。NET做为后台程序语言来结合XML建造论坛?
无特殊意义,ASP、PHP、JSP或其他后台程序语言均可,甚至VB、VC、JAVA等能以软件形式表现论坛
5:两者相比,XML充当“数据库”做的论坛或其他系统有何好处?
如程序及XML结构精妙完善,无论在大小程序系统上均在
-速度(基于文件,相对忧于ADO存取数据库)
-资源占用(无论数据总和多少,基本是处理分布式的小型文件(通常在1-100K内),无论是在内存或CPU的占用等均忧于数据库)
-分布式(单一的文件集合于文件夹,与将数据集成为一身的数据库,各有优势)
-移植性和通用性(XML本身即是一种通用数据描述语言,无论是在不同操作系统或程序语言上均能顺利移植和应用)
-修改、查找、维护、批量处理(如数据量大,则必须借助程序系统操作,如直接在文件夹管理文件非常麻烦,这方面逊于数据库系统的界面和易用性,除非建立自己的XML数据处理软件或WEB系统弥补这方面的不足)
-安全性(大智慧是取决于程序、加密方面,小聪明是更改后台文件、文件夹的名称和存放位置,只不过基于XML文件构建的数据库结构比较散乱,不如数据表封装的简单)

第二节:引路入门、建立基地(XML数据库结构)

明确做什么样的论坛系统,才能理起思路,这里我们假设开发一简单论坛,其功能功用均效仿常见论坛,我们只要求一个栏目
XML数据库的实现{
会员资料存储(在主目录新建一文件,名为USER.XML,该USER.XML文件即作为存储所有会员资料的文件,本例结构可是如下形式)[
<XML VERSION="1.0" ENCODING="GB2312">
<ALLUSER>
  <FYW NAME="风云舞" PASS="1234" SEX="男士" AGE="20" IMG="HTTP://WWW.LSHDIC.COM/BBS/IMAGE/USER40.JPG" FATIE="20" EXP="243" HOMEPAGE="HTTP://WWW.LSHDIC.COM" EMAIL="LSHDIC@SINA.COM" OICQ="21152530" QIANMING="签名档内容" ADDRESS="山东临沂"/>
  <CIKE NAME="孤独刺客" PASS="123" SEX="男士" AGE="20" IMG="MAN2.GIF" FATIE="0" EXP="20" HOMEPAGE="" EMAIL="GDCIKE@163.COM" OICQ="" QIANMING="风云他是猪!吭大爷做关税区的斑竹!" ADDRESS="山东临沂"/>
  <PLGIRL NAME="千千纯子" PASS="123" SEX="女士" AGE="20" IMG="WOMAN1.GIF" FATIE="0" EXP="0" HOMEPAGE="" EMAIL="" OICQ="" QIANMING="" ADDRESS=""/>
</ALLUSER>
]
这是本例所采用的XML存储结构,不难看出一个标签即包含了一个会员的所有信息,标签名即是“用户帐号”,其中NAME=昵称、PASS=密码、SEX=性别……,其中“用户帐号”必须保证是唯一的,而且必须限制为英文字母或英文字母后边带数字,关于XML的文件结构及数据一定要求符合XML文档规范及命名规范,若此后在程序中用户所提交数据处理不托,或可导致资料泄露,或该USER.XML即宣告报废,必须手工查找更正,否则无法正常存取

论坛帖子资料存储(在主目录新建一文件夹,名为DATA,该DATA文件夹今后即保存所有会员发表的帖子,其中帖子的文件名是随机或有规律的如1.XML,2.XML,3.XML,这些文件存储了帖子的所有数据包括主题、回复,当然这些文件的建立、修改、起名、删除等都是在以后用程序实现的,至于新文件起名的程序部分要保证其名称与以有文件互不冲突即可,文件名可以是无任何规律的,毕竟今后我们不以文件名来实现排序,其单个XML文件内容结构如下)[
1.XML:
<XML VERSION="1.0" ENCODING="GB2312">
<XML-STYLESHEET TYPE='TEXT/XSL' HREF='../FILE.ASPXDEX=1.XML'>
<DOCUMENT>
   <RECORD>
   <ANTHOR>FYW</ANTHOR>
   <TITLE>帖子标题</TITLE>
   <DATE>2003-12-6 3:27:18</DATE>
   <GENGXINDATE>2003-12-6 3:27:18</GENGXINDATE>
   <BODY>帖子内容

&LT;HR&GT;内容是以过滤HTML等于XML文档规范相冲突的字符以后的合法内容,标题也需要过滤
</BODY>
   </RECORD>
</DOCUMENT>

2.XML:
<XML VERSION="1.0" ENCODING="GB2312">
<XML-STYLESHEET TYPE='TEXT/XSL' HREF='../FILE.ASPXDEX=7908604.XML'>
<DOCUMENT>
  <RECORD>
    <ANTHOR>FYW</ANTHOR>
    <TITLE>帖子标题</TITLE>
    <DATE>2003-12-6 3:54:59</DATE>
    <GENGXINDATE>2003-12-6 3:54:59</GENGXINDATE>
    <BODY>帖子内容</BODY>
    <REPLY>
      <ANTHOR>CIKE</ANTHOR>
      <DATE>2003-12-6 5:53:38</DATE>
      <GENGXINDATE>2003-12-6 5:53:38</GENGXINDATE>
      <BODY>1楼回复的内容</BODY>
    </REPLY>
    <REPLY>
      <ANTHOR>PLGIRL</ANTHOR>
      <DATE>2003-12-7 5:53:38</DATE>
      <GENGXINDATE>2003-12-7 5:53:38</GENGXINDATE>
      <BODY>2楼回复的内容</BODY>
    </REPLY>
  </RECORD>
</DOCUMENT>
]
这是本例论坛帖子的XML存储结构,现在我们建立起了会员资料存储文件(USER.XML)以及论坛帖子存放地点和存放结构(DATA*.XML),你是否以有所启发?用程序在这两者基石上搭桥引线是否真的能够实现复杂的论坛系统哪?答案是肯定的,只要能通过程序在后台操纵这两个存储基地,加以友好的界面,即可小试牛刀
}

第三节:诸葛布阵、将士磨刀

XML数据存储结构以完成,下面一一列出完成论坛大业所需要的材料
项目包括{
通用函数页
(建立或一或二这种通用函数页或DLL或者是用户控件,将常用的程序过程、变量、函数放入其中,此后使用可大大节省时间避免重复劳动,这在下一章将有所提及)

游客与会员的区分
(即是一个SESSION,本例为SESSION("WHO")值是否存在的判断,如存在即判断是会员,如不存在值即为游客,我们本例不使用COOKIES存储用户数据,游客权限自然是只能浏览帖子,不能发表或回复帖子,而会员则可以)

会员注册
(包含各种表单的页面,目的是完成向USER.XML添加一新的标签节点(等同添加一新的会员数据),要处理好用户所提交的数据,方法要用到防止跨站提交、会员帐号(即XML节点头标签)要用正则表达式限制为类似程序变量的语法要求或干脆只允许使用英文字母、XML节点属性至少要过滤<>&"'以及回车符号、防止申请的会员帐号以存在USER.XML、所有数据英文符号均转换为小写格式即不区分大小写包括用户帐号和密码)

会员登陆
(包含用户帐号输入框、密码输入框和一个登陆按钮,提交后利用XMLDOM搜索USER.XML是否有匹配的用户帐号(要特别注意过滤用户提交的数据,尤其是*号等,这在XMLDOM的搜索中被认为是通配符),如USER.XML存有该帐号,即将一个SESSION,本例为SESSION("WHO"),设值为该用户帐号,游客身份即成为会员身份)

会员资料修改
(禁止游客浏览本页,样式保持与会员注册页的表单基本一样(但不包含用户帐号名称修改的功能),只不过所有表单的值均是预读了USER.XML中匹配SESSION("WHO")该会员的信息,用户修改过后,单击完成修改按钮,此时后台程序修改USER.XML中该会员对应的节点数据即可)

会员资料显示
(只读页面,读取网址参数中对应的会员帐号,显示会员所有无需保密的信息)

一个论坛栏目主页
(即帖子列表,根据URL页码参数分页,显示DATA目录中对应页码的所有帖子信息,排序自然根据文件的修改日期,最新更新的最靠顶,这是开发本论坛中最难的一个项目之一,要谨慎处理,最好实现点对点(即1-10,30-40,100-110)形式分页的抽取DATA目录中的文件,可以保证最优质的运行速度)

帖子显示页
(本例的帖子显示是直接在浏览器访问XML文件,即HTTP://XXX.XXX.XXX/XXX.XML的URL形式访问,由于仅仅使用静态XSL控制XML文件的二层输出形式是远远不够的,所以我们采取的显示结构是三层,其顺序为(1:打开XML文件后查找XML-STYLESHEET节点的HREF所指定的XSL文件---2:由于目标文件类型是ASPX,我们在目标ASPX中根据URL参数访问参考对应的XML文件数据,控制数据流输出格式为XSL,丛中很好的整理出理想的XSL样式表,即起到了中间层的关键作用---3:由于ASPX输出的XSL是我们在后台整理过的,其高度的智能、合理,即可以配合XML数据输出结构复杂的帖子显示页),期间中间层的开发难度最大,是本论坛系统中最难的一个步骤,简单的地方是XMLDOM分析抽取目标XML中的节点数据,实现显示主题、显示帖子作者、显示帖子内容、显示帖子所有回复,但最难点,本人在着手开发时,就无法解决帖子回复的分页,以及ASPX服务器端控件和XSL文档规范相互冲突,可能是本人水平有限,或也是本人原创的这种3层输出存在本质的缺陷,所谓XML实现数据库容易,但通过XSL实现超越HTML的理想输出难)

发表新贴
(禁止游客发表,该项目即是一个输入主题的输入框+内容输入框+提交按钮,可以绑定在栏目帖子列表页下方或新建一个专页,用户提交发表后要用SERVER.HTMLENCODE()过滤用户所提交的数据,而后用程序创建XML文件、给XML文件起名、整理XML文件的文件格式如第二节所写的格式、向节点内写入过滤后的数据、修改USER.XML对应的发贴会员的节点实现积分+2和发贴数+1,用COOKIES限制7秒内禁止多次提交灌水)

回复新贴
(禁止游客回复,该页可绑定帖子显示页下方或新建一个专业,提供一内容输入框+提交按钮,提交后如发表新贴过程类同,要进行数据过滤,而后在对应的帖子存储XML文件中插入一REPLY节点,在该节点中建立用于存储回复作者名称、回复内容、回复日期、回复更新日期等节点,修改USER.XML对应的发贴会员的节点实现积分+1和发贴数+1,用COOKIES限制7秒内禁止多次提交灌水)

版主管理功能
(要实现密码验证,判断禁止游客及会员使用,可选的后台管理功能有奖励会员积分、减少会员积分、删除会员、修改任何帖子、删除任何帖子,甚至可以考虑诸多封IP、置顶、锁定、封版主等等高级功能)
}

第四节:君临沙场、锦囊相助

通过以上三节修炼,君若仔细攻读,定已胸有成竹,跃跃欲试,此时想必已经动起手来,或者是思路很清晰却不知程序该如何写,若真是如此,不必急噪,笔者先将平生所学一些常用“兵法”一一列出,定可使汝茅塞顿开

1:错误提示函数(需要时使用,可弹出对话框给与用户错误提醒,而后自动退回上一页,此函数建议保存为一通用文件,需要时<!--#INCLUDE FILE="PUBLICFUN.ASPX"-->一下即可使用)

<SCRIPT LANGUAGE=VB RUNAT='SERVER'>
SUB T2(TSTR2 AS STRING)
RESPONSE.WRITE (REPLACE("<SCRIPT LANGUAGE=VBS> MSGBOX " & CHR(34) & TSTR2 & CHR(34) & ",16," & CHR(34) & "错误提示" & CHR(34) & ":HISTORY.BACK()&LT;/SCRIPT>","&LT;","<")):RESPONSE.END
END SUB
</SCRIPT>

2:一般数据检测函数(修改XML标签属性时建议使用,用于一般检测,至于用户帐号等还需要更严密的数据过滤)

<SCRIPT LANGUAGE=VB RUNAT='SERVER'>
SUB JIANCHA(REQUESTSTR AS STRING)         '本例过滤'"<>&*,如有疏漏请补之
DIM ARRAY1(5) AS STRING
ARRAY1(0)="'":ARRAY1(1)=CHR(34):ARRAY1(2)="<":ARRAY1(3)=">":ARRAY1(4)="&":ARRAY1(5)="*"
DIM TEMPI AS INTEGER
FOR TEMPI=0 TO UBOUND(ARRAY1)
IF INSTR(REQUESTSTR,ARRAY1(TEMPI))<>0 THEN RESPONSE.WRITE (REPLACE("<SCRIPT LANGUAGE=VBS> MSGBOX " & CHR(34) & "参考数据 " & REQUESTSTR & " 不可以含有禁止符号 [" & ARRAY1(TEMPI) & "] ,自动返回请更正" & CHR(34) & ",16," & CHR(34) & "错误提示" & CHR(34) & VBCRLF & "HISTORY.BACK()&LT;/SCRIPT>","&LT;","<")):RESPONSE.END
NEXT
END SUB
</SCRIPT>

3:ASP.NET拒绝跨站提交注入(可在会员注册、会员修改页等表单较多的页使用)

<%
IF LCASE(MID(REQUEST.SERVERVARIABLES("HTTP_REFERER"),8,LEN(REQUEST.SERVERVARIABLES("SERVER_NAME"))))<>LCASE(REQUEST.SERVERVARIABLES("SERVER_NAME")) THEN T2("拒绝跨站提交!")
%>

4:向目标XML文件添加新节点

<%@IMPORT NAMESPACE='SYSTEM.XML'%>
<%
DIM USERDOM1=NEW XMLDOCUMENT,USERDOM2,USERDOM3
USERDOM1.LOAD (SERVER.MAPPATH("USER.XML"))          '装载需要操作的XML文件
USERDOM2=USERDOM1.SELECTSINGLENODE("ALLUSER")       '操作游标指向ALLUSER节点,句柄给USERDOM2变量
USERDOM3=USERDOM1.CREATEELEMENT("FYW")              '新创建一名为FYW的节点,并将句柄给USERDOM3变量
USERDOM3.SETATTRIBUTE("NAME","风云舞")              '为USERDOM3添加节点属性,新属性名为NAME,值为风云舞
USERDOM3.SETATTRIBUTE("PASS","123")
USERDOM3.INNERTEXT="测试"                           '设置USERDOM3节点所包含的数据
USERDOM2.APPENDCHILD(USERDOM3)                      'USERDOM2即ALLUSER节点下添加USERDOM3所描述的FYW节点
USERDOM1.SAVE (SERVER.MAPPATH("USER.XML"))          '将变动后的新XML数据保存到USER.XML
%>

5:修改XML节点

<%@IMPORT NAMESPACE='SYSTEM.XML'%>
<%
DIM USERDOM1=NEW XMLDOCUMENT,USERDOM2
USERDOM1.LOAD (SERVER.MAPPATH("USER.XML"))
USERDOM2=USERDOM1.SELECTSINGLENODE("ALLUSER").GETELEMENTSBYTAGNAME("FYW")  '操作游标指向ALLUSER节点下的FYW节点
USERDOM2(0).SETATTRIBUTE("NAME","风云舞")           '设定FYW节点数组的第一个,将其NAME属性值修改为风云舞
USERDOM2(0).INNERTEXT="测试"                        '设定FYW节点数组的第一个,将其所包含的数据改为测试
USERDOM1.SAVE (SERVER.MAPPATH("USER.XML"))          '将变动后的新XML数据保存到USER.XML
%>

6:查找判断XML节点是否存在

<%@IMPORT NAMESPACE='SYSTEM.XML'%>
<%
DIM USERDOM1=NEW XMLDOCUMENT
USERDOM1.LOAD (SERVER.MAPPATH("USER.XML"))          '装载需要操作的XML文件
'以下正是本人为什么要用“用户帐号”标识用户唯一身份的目的,查找方便呀:)
IF USERDOM1.SELECTSINGLENODE("ALLUSER").GETELEMENTSBYTAGNAME("FYW").COUNT<>0 THEN T2("FYW节点以存在")
%>

7:批量添加XML节点(在编写回复帖子时,用第4例提到的方法一个一个填加节点很麻烦,这时可以考虑用此方法批量填加)

<%@IMPORT NAMESPACE='SYSTEM.XML'%>
<%
DIM FILEDOM=NEW XMLDOCUMENT,FILEDOM2
FILEDOM.LOAD(SERVER.MAPPATH("DATA" & REQUEST.QUERYSTRING("DEX")))  'REQUEST.QUERYSTRING("DEX")=6.XML
FILEDOM2=FILEDOM.CREATEELEMENT("REPLY")
'以下这种方法很方便,而且对XML文件的结构排版也很好,合理的空格和回车可以表现良好的XML文档结构
FILEDOM2.INNERXML=VBCRLF & "      <ANTHOR>" & SESSION("WHO") & "</ANTHOR>" & VBCRLF & "      <DATE>" & NOW & "</DATE>" & VBCRLF & "      <GENGXINDATE>" & NOW & "</GENGXINDATE>" & VBCRLF & "      <BODY>" & NEIRONG.VALUE & "</BODY>" & VBCRLF & "      "
FILEDOM.SELECTSINGLENODE("DOCUMENT/RECORD").APPENDCHILD(FILEDOM2)
FILEDOM.SAVE(SERVER.MAPPATH("DATA" & REQUEST.QUERYSTRING("DEX")))  'REQUEST.QUERYSTRING("DEX")=6.XML
%>

8:删除XML节点

<%@IMPORT NAMESPACE='SYSTEM.XML'%>
<%
DIM USERDOM1=NEW XMLDOCUMENT,USERDOM2
USERDOM1.LOAD (SERVER.MAPPATH("USER.XML"))
USERDOM1.DOCUMENTELEMENT.REMOVECHILD (USERDOM1.SELECTSINGLENODE("ALLUSER/FYW"))  '删除ALLUSER节点下的所有FYW节点
USERDOM1.SAVE (SERVER.MAPPATH("USER.XML"))
%>

9:创建新的XML文件(可以创建任何类型后缀的文件,不局于XML文件)

<%@IMPORT NAMESPACE='SYSTEM.IO'%>
<%
DIM NEWFILE=NEW STREAMWRITER(SERVER.MAPPATH("DATA" & NEW DIRECTORYINFO(SERVER.MAPPATH("DATA")).GETFILES().LENGTH+1 & ".XML"),FALSE,SYSTEM.TEXT.ENCODING.DEFAULT)
'以上我们指定默认编码方式为SYSTEM.TEXT.ENCODING.DEFAULT,或者可改为SYSTEM.TEXT.ENCODING.GETENCODING("GB2312"),不然将以UTF8编码那样XML含有中文就无法正常工作了
NEWFILE.WRITE ("<XML VERSION=" & CHR(34) & "1.0" & CHR(34) & " ENCODING=" & CHR(34) & "GB2312" & CHR(34) & ">" & _
VBCRLF & "<XML-STYLESHEET TYPE='TEXT/XSL' HREF='../FILE.ASPXDEX=" & FILELENGTH+1 & ".XML'>" & VBCRLF & _
"<DOCUMENT>" & VBCRLF & "   <RECORD>" & VBCRLF & "   <ANTHOR>" & SESSION("WHO") & "</ANTHOR>" & VBCRLF & _
"   <TITLE>" & SERVER.HTMLENCODE(BIAOTI.VALUE) & "</TITLE>" & VBCRLF & "   <DATE>" & NOW & "</DATE>" & VBCRLF & _
"   <GENGXINDATE>" & NOW & "</GENGXINDATE>" & VBCRLF & "   <BODY>" & SERVER.HTMLENCODE(NEIRONG.TEXT) & "</BODY>" & VBCRLF & _
"   </RECORD>" & VBCRLF & "</DOCUMENT>")
NEWFILE.CLOSE:NEWFILE=NOTHING
%>

10:删除指定文件

<%@IMPORT NAMESPACE='SYSTEM.IO'%>
<%FILE.DELETE(SERVER.MAPPATH("DATA2.XML"))%>

11:用COOKIES实现7秒内不许重复灌水

<%
IF NOT REQUEST.COOKIES("LSHDICBBS") IS NOTHING THEN
IF ISDATE(REQUEST.COOKIES("LSHDICBBS")("GUANSHUI"))=FALSE THEN RESPONSE.COOKIES("LSHDICBBS")("GUANSHUI")=NOW
IF DATEDIFF("S",REQUEST.COOKIES("LSHDICBBS")("GUANSHUI"),NOW)<7 THEN RESPONSE.WRITE ("7秒内禁止重复发贴灌水"):RESPONSE.COOKIES("LSHDICBBS")("GUANSHUI")=NOW:RESPONSE.END
END IF
RESPONSE.COOKIES("LSHDICBBS")("GUANSHUI")=NOW
%>

12:用正则表达式限制用户提交的数据必须为英文字母(有兴趣可延伸强化为支持英文字母+数字的形式)

<%
DIM NAME1=REQUEST.FORM("USERNAME")
IF REGEX.REPLACE(NAME1,"[A-Z]+","",REGEXOPTIONS.IGNORECASE)<>"" THEN T2("帐号名必须使用A-ZA-Z范围的英文字母")
%>

13:扩展提示工具(早先原创脚本,可根据需要修改)

<DIV STYLE='POSITION:ABSOLUTE;LEFT:0;TOP:0;BORDER-BOTTOM:1 SOLID GREEN;BORDER-RIGHT:1 SOLID GREEN;BORDER-LEFT:1 SOLID CCCCCC;BORDER-TOP:1 SOLID CCCCCC;DISPLAY:NONE;Z-INDEX:500;BACKGROUND-COLOR:#FFF7FF;PADDING:2;WHITE-SPACE:NOWRAP;TABLE-LAYOUT:FIXED;' ID=SHOWDIV></DIV>
<SCRIPT>
VAR OLDTEXT="加速变量",COLORS1=NEW ARRAY("#FFECD5","#FFF7FF","#FFFFEB","WHITE","#F5FFEB","#EEFAFF","#FFFFEE","#EDFFFC")
FUNCTION DOCUMENT.ONMOUSEMOVE(){
TRY{
IF(EVENT.SRCELEMENT.GETATTRIBUTE('LSHDIC'))
{
SHOWDIV.STYLE.LEFT=EVENT.X-3;SHOWDIV.STYLE.TOP=EVENT.Y+DOCUMENT.BODY.SCROLLTOP+18;IF(EVENT.SRCELEMENT.LSHDIC!=OLDTEXT){OLDTEXT=EVENT.SRCELEMENT.LSHDIC;SHOWDIV.INNERTEXT=OLDTEXT;SHOWDIV.STYLE.BACKGROUNDCOLOR=COLORS1[MATH.ROUND(MATH.RANDOM()*COLORS1.LENGTH)]};IF(SHOWDIV.STYLE.DISPLAY=='NONE')SHOWDIV.STYLE.DISPLAY='
}ELSE{IF(SHOWDIV.STYLE.DISPLAY==')SHOWDIV.STYLE.DISPLAY='NONE';}}CATCH(E){}
}
</SCRIPT>
<A HREF="HTTP://WWW.LSHDIC.COM" LSHDIC='欢迎访问作者网站'>蓝丽网</A>
<A HREF="HTTP://WWW.LSHDIC.COM/BBS" LSHDIC='欢迎访问蓝丽技术论坛&#13;&#13;2003-12-6 10:31:32'>蓝丽技术论坛</A>

第五节:神剑在此、赠我知音

经过以上4个章节的艰苦学习,我相信您以基本了解了如何用后台程序结合XML数据库实现复杂的论坛和系统,但通读N边也起不了实际作用,你必须着手去做,才能在实践中总结出自己的经验,本文章仅仅是个辅助参考而已

由于时间有限,本人只能将亲手开发的ASP。NET版本的XML无数据库论坛(全称:蓝丽NETXML无数据库论坛1.0)奉献给各位研究,由于本人的ASP。NET虚拟空间有点问题,无法提供在线演示,现仅提供全部原代码下载(以上13例原代码多数采摘于本系统中),地址:HTTP://WWW.LSHDIC.COM/DOWNLOAD/NETXMLBBS.RAR,下载后可参考帮助文件,在您自己的ASP。NET服务器上测试。

 
| 关于我们 | 联系我们 | 业务合作 | 友情链接 | 网站地图 |
版权所有©思顿科技-专业网站制作指南2004-2006 在线技术支持- QQ:63127313