以文本方式查看主题 - ╋艺 镇╋ (http://zyzsky.com/bbs/index.asp) -- ┣◇网站建设&Web语言 (http://zyzsky.com/bbs/list.asp?boardid=4) ---- asp读取和写入xml简单教程+实例 (http://zyzsky.com/bbs/dispbbs.asp?boardid=4&id=2325) |
-- 作者:乐魔舞 -- 发布时间:2010/9/28 16:00:41 -- asp读取和写入xml简单教程+实例 一、读者指引 如果你正在用ASP+XML写一些程序,或者你正在学XML那就值得一看。 阅读本文须具备的知识,对ASP有基本的了解,对XML和DOM有基本了解,如果你不了解那么你通过学习本文基本上能够 二、基本思想 本文思想是基于用ASP和DOM来读取和存储XML数据,并利用XML数据来存储留言信息,达到同用数据库存储数据的功 三、XML留言本的优势 或许你会问用ASP+TXT文本也可以达到不用数据库实上留言的功能,不错确实能够做到,而且网上也有很多这样的留 1、XML+ASP比ASP+TXT速度要快。可能你也发现当TXT文件很少时速度出奇的快,但是随着留言信息的增加TXT文本 3、XML数据夸操作系统性,只要我们把这些数据存储为XML那么这些数据就能被应何基它语言或系统所识别,而不用做 四、建立存储留言信息的XML文件(List.xml) 0、留言ID号--定义为<id> 1、用户名我们--定义为<username> 2、来自那里们--定义为<fromwhere> 3、留言时间定--义为<Posttime> 4、用户主页定--义为<homepage> 5、用户的信箱--定义为<email> 6、留言内容定--义为<text> 当然以上不是必须的读者可以自行命名并加减相关标签,把它们组合起来就得到List.xml的文件了 <?xml version="1.0" encoding="gb2312"?>
|
-- 作者:乐魔舞 -- 发布时间:2010/9/28 16:03:37 -- 五、建立显示XML数据的ASP文件(index.asp) \'\'\'\'\'\'\'\'strSourceFile = Server.MapPath("test.xml") \'获取XML文件的路径这里根据你的虚拟目录不同而不同 Set objXML = Server.CreateObject("Microsoft.FreeThreadedXMLDOM") \'以自由线程创建一个XML对像 objXML.Load(Server.MapPath("test.xml")) \'\'\'\'\'\'\'\'objXML.load(strSourceFile)\'把XML文件读入内存 Set objRootsite = objXML.documentElement.selectSingleNode("NewList") \'选取NewList节点 %> <html> <head> <title>留言本</title> <meta http-equiv="Content-Type" c> <style type="text/css"> <!-- td { font-family: "宋体"; font-size: 9pt; text-decoration: none} a { font-family: "宋体"; font-size: 9pt; color: #0066CC; text-decoration: none} a:hover { color: #FF6600; text-decoration: underline} --> </style> </head><body bgcolor="#0099CC" text="#000000"> <table width="80%" border="0" cellspacing="1" cellpadding="4" align="center" bgcolor="#CCCCCC"> <tr bgcolor="#000000"> <td colspan="2"><font color="#FFFFFF">留言溥 <a href="PostNew.asp"><font color=#FFFFFF>写新留言 </font></a></font></td> </tr> <% PageSize =10\'假设每页显示10条留言 AllNodesNum =objRootsite.childNodes.length-1 \'获取子节点数据(因为是从节点数从0开始的所最大子节点数要减1) PageNum=AllNodesNum\\PageSize+1\'算出总页数 PageNo=request.querystring("PageNo") if PageNo="" then\'如果是每一次获得页面则定位到每一页显示最新的留言 PageNo=PageNum end if StarNodes=PageNo*PageSize-1\'获得起始节点 EndNodes=(PageNo-1)*PageSize\'获得结束节点 if EndNodes<0 then EndNodes=0 end if if StarNodes>AllNodesNum then\'判断起始节点数是否超过总的节点数 EndNodes=EndNodes-(StarNodes-AllNodesNum) \'如果超过则结束节点要减去(StarNodes-AllNodesNum)的差值否则下标会超界出错 StarNodes=AllNodesNum end if if EndNodes<0 then EndNodes=0 end if while StarNodes>=EndNodes \'从结束节点到超始节点之间读取节点数据 username = objRootsite.childNodes.item(StarNodes).childNodes.item(1).text \'获得用户名 fromwhere = objRootsite.childNodes.item(StarNodes).childNodes.item(2).text \'获得用户来自那里 Posttime = objRootsite.childNodes.item(StarNodes).childNodes.item(3).text \'获得留言时间 homepage = objRootsite.childNodes.item(StarNodes).childNodes.item(4).text \'获得用户主页 email = objRootsite.childNodes.item(StarNodes).childNodes.item(5).text \'获得用户Eamil text = objRootsite.childNodes.item(StarNodes).childNodes.item(6).text \'获昨留言内容 \'***************************************************************************** \'这里使作了XML的DOM来读取数据,显然objRootsite对像所对应的节点为<NewList> \' objRootsite.childNodes.item(StarNodes)所对应的节点就是<list>节点因为不至一个<list>节点所以用了item()来识别当前节点数据,随着StarNodes的递减<list>节点根着往上移一个个读取<list>节点数据。 \'objRootsite.childNodes.item(StarNodes).childNodes.item(1).text所对应的节点为具体的每个节点的文本值,这里(1)所对应的就是username用户名(因为<list>节点的子节点才是我们真正所要的) \'****************************************************************************** text = replace(text,chr(13),"<br>") \'替代回车 text = replace(text,chr(32)," ") \'替代空格 %> <tr bgcolor="#F0F0F0"> <td width="21%" height="94" valign="top">姓 名:<%=username%><br> 来 自:<%=fromwhere%><br> </td> <td width="79%" height="94" valign="top"> | <a href="<%=homepage%>" target=_blank title="<%=username%>的主页">主页</a> | | <a href="mailto:<%=email%>" title="给<%=username%>写信">信箱</a> | |<font color="#CC6633"> 留言时间:<%=Posttime%> </font>| <hr> <%=text%> </td> </tr> <tr bgcolor="#FFFFFF" align="right"> <td colspan="2"> </td> </tr> <% StarNodes=StarNodes-1 wend set objXML=nothing %> <tr bgcolor="#FFFFFF" align="right"> <td colspan="2"> 共有<<%=PageNum%>>页 <% if cint(PageNo)<>PageNum then\'分页 response.write "<a href=\'/index.asp?PageNo="&(PageNo+1)&"\'>上一页</a>" end if if cint(PageNo)<>1 then response.write "<a href=\'/index.asp?PageNo="&(PageNo-1)&"\'>下一页</a> " end if %> </td> </tr> </table> </body> </html> [此贴子已经被作者于2010-9-28 16:27:25编辑过]
|
-- 作者:乐魔舞 -- 发布时间:2010/9/28 16:04:13 -- 六、建立写新留言程序(PostNew.asp) <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" c /> <title>Untitled Document</title> <style type="text/css"> <!-- td { font-size: 9pt} --> </style> </head> <% username=request.form("username") if username<>"" then fromwhere =request.form("fromwhere") homepage =request.form("homepage") email =request.form("email") text =request.form("text") text =replace(text,"<","<") Posttime =now() \'strSourceFile = Server.MapPath("test.xml") \'获取XML文件的路径这里根据你的虚拟目录不同而不同 Set objXML = Server.CreateObject("Microsoft.XMLDOM") \'创建XML对像 objXML.Load(Server.MapPath("test.xml")) \'objXML.load(strSourceFile) \'把XML文件读入内存中 Set objRootlist = objXML.documentElement.selectSingleNode("NewList") \'选取<NewList>节点 if objRootlist.hasChildNodes then \'判断<NewList>是否有子节点(因为如果是每一次<NewList>是没有子节点的, \'如果不加判断在第一次运得时就会报错 id = objRootlist.lastchild.firstchild.text+1 \'这里获得将要插入子节点的ID号,其ID号为<NewList>的最后一个子节点(lastchild)的第一个子节点(firstchild)的ID号加1(这里我们按照关系型数据库的ID号来递增) else \'如是没有字子节点则是第一次留言ID号设为1 id=1 end if brstr=chr(13)&chr(10)&chr(9) \'为了插入XML文件中的节点换行空格排列整齐(当然你也可以不用这样只是为了XML数据好看而以) XMLnode=brstr&"<list>"&brstr & _ "<id>"&id&"</id>"&brstr & _ "<username>"&username&"</username>"&brstr & _ "<fromwhere>"&fromwhere&"</fromwhere>"&brstr & _ "<Posttime>"&Posttime&"</Posttime>"&brstr & _ "<homepage>"&homepage&"</homepage>"&brstr & _ "<email>"&email&"</email>"&brstr & _ "<text>"&text&"</text>"&brstr & _ "</list>"&chr(13) \'根据得到的数据建立XML片段 set objXML2=Server.CreateObject("Microsoft.XMLDOM") \'建立一个新XML对像 objXML2.loadXML(XMLnode) \'把XML版片段读入内存中 set rootNewNode=objXML2.documentElement \'获得objXML2的根节点 objRootlist.appendChild(rootNewNode) \'把XML片段插入到List.xml中 objXML.save(Server.MapPath("test.xml")) \'存储lsit.xml文件(因为不存储List.xml只在内存中更新了) set objXML=nothing set objXML2=nothing response.write "谢谢您的留言" response.end end if %> <body bgcolor="#0099CC" text="#000000"> <table width="80%" border="0" cellspacing="1" cellpadding="4" align="center" bgcolor="#FFFFFF"> <form action="PostNew.asp" method="post" name="form1"> <tr bgcolor="#000000"> <td colspan="2"><font color="#FFFFFF">新留言</font></td> </tr> <tr bgcolor="#EFEFEF"> <td width="19%" align="right">姓 名:</td> <td width="81%"> <input type="text" name="username"> ** </td> </tr> <tr bgcolor="#EFEFEF"> <td width="19%" align="right">来 自:</td> <td width="81%"> <input type="text" name="fromwhere" value="中国"> </td> </tr> <tr bgcolor="#EFEFEF"> <td width="19%" align="right">主 页:</td> <td width="81%"> <input type="text" name="homepage" value="http://"> </td> </tr> <tr bgcolor="#EFEFEF"> <td width="19%" align="right">Email:</td> <td width="81%"> <input type="text" name="email"> </td> </tr> <tr bgcolor="#EFEFEF"> <td width="19%" align="right" valign="top">内 容:</td> <td width="81%"> <textarea name="text" cols="60" rows="10"></textarea> </td> </tr> <tr bgcolor="#EFEFEF"> <td width="19%" align="right"> </td> <td width="81%"> <input type="submit" name="Submit" value="提交"> <input type="reset" name="Submit2" value="重填"> </td> </tr> </form> </table> </body> </html> [此贴子已经被作者于2010-9-28 16:28:03编辑过]
|
-- 作者:乐魔舞 -- 发布时间:2010/9/28 16:05:07 -- 七、总结 到这里我们就建立一个简单并有分页功能的XML留言本了,呵看完了简单吧,其实我这里只起一个抛砖引玉的功能,其目的是引导大家建立更复杂更好的ASP+XML程序,例如:所上面的留言本加上回复功能,管理功能,点击计数据功能等,甚至你可以把它变一个BBS等等。原帖地址: http://hi.baidu.com/moye1981/blog/item/3fad57037e61928cd43f7c1e.html 不过原帖中的部分内容有问题,以上内容经过本人更改,运行正常 |