|
|
||||
首页
文学作品 网页设计 平面设计 程序设计 考试认证 基础办公 QQ资源 服务器架设 网站运营 网页资源
|
|
|
| 汉南在线 → 网页设计 → Asp动态程序 | |||||||||||
从一个简单的新闻发布系统的说起: 首先,我们建立一个XML文档,命名为nnDB.xml: ---------------------------------------nnDB.xml--------------------------------------- <?xml version="1.0" encoding="GB2312"?> <data><news></news></data> ---------------------------------------nnDB.xml--------------------------------------- 接着,做一个发布的页面,这个发布页面连带了有新闻的显示列表,把他命名为post.asp吧! ---------------------------------------post.asp--------------------------------------- <style> #news_list { width: 430px; float: left; border: 1px solid #CFCFCF; } #tt { width: 300px; float: left; border-top: 2px solid #CFCFCF; } #pt { width: 129px; float: right; border-top: 2px solid #CFCFCF; } #ct { width: 430px; float: left; border-top: 1px solid #CFCFCF; } #news_list li span { font-size: 12px; letter-spacing: 1px; font-family: Tahoma; } #c1 { width: 40px; float: left; padding: 5px 0px 5px 0px; background-color: #EFEFEF; font-weight: bold; color: #666; text-align: center; border: 1px solid #FFF; } #c2 { float: left; padding: 5px; font-size: 12px; color: #333; text-align: center; letter-spacing: 1px; border: 1px solid #FFF; } #c3 { width: 380px; float: right; margin: 0px 5px 0px 5px; padding: 3px 0px 3px 0px; text-align: right; color: #CCC; border-top: 1px dotted #CFCFCF; } </style> <% Set XMLOBJ = Server.CreateObject("Microsoft.XMLDOM") XMLOBJ.async = False XMLOBJ.load Server.MapPath("nnDB.xml") Set news_root = XMLOBJ.documentElement.selectSingleNode("news") news_count = news_root.childNodes.length HTML_CODE = "<div id=""news_list"">" for i = 0 to news_count - 1 Set temp_news = news_root.childNodes.item(i).childNodes HTML_CODE = HTML_CODE & "<li id=""tt""><span id=""c1"">标题</span><span id=""c2"">" & temp_news.item(3).text & "</span></li><li id=""pt""><span id=""c1"">作者</span><span id=""c2"">" & temp_news.item(4).text & "</span></li>" HTML_CODE = HTML_CODE & "<li id=""ct""><span id=""c1"">内容</span><span id=""c2"">" & temp_news.item(5).text & "</span><span id=""c3"">发表时间:" & temp_news.item(2).text & " 点击量:" & temp_news.item(6).text & "</span></li>" next HTML_CODE = HTML_CODE & "</div>" Response.write HTML_CODE %> <form id="form1" name="form1" method="post" action="save_DB.asp"> <p>新闻标题:<input type="text" name="tt" /></p> <p>新闻作者:<input type="text" name="pt" /></p> <p>新闻内容:<textarea name="ct" cols="50" rows="12"></textarea></p> <p><input type="submit" name="Submit" value="提交" /><input type="reset" name="Submit2" value="重置" /></p> </form> ---------------------------------------post.asp--------------------------------------- 最后就是save_DB.asp,写入XML的页面: ---------------------------------------save_DB.asp--------------------------------------- <% ' tt 作者 pt 发布人 ct 新闻内容 tt = trim(Request.Form("tt")) ' trim 去空格 pt = trim(Request.Form("pt")) ct = trim(Request.Form("ct")) time_now = now() ' 抓时间,作为新闻条目的区别检索 D_y = year(time_now) D_m = month(time_now) D_d = day(time_now) D_hr = hour(time_now) D_mi = minute(time_now) D_se = second(time_now) ' PS:为何要用日期时间做新闻区别呢?我们假设,这个发布后台,只有你一个人可以访问,那么可以肯定一样东西:同一时间内,只可能发布一篇文章。 ' 当然,网站平台是面向多用户,如何制作更科学合理的数据索引呢?嗯,大家有兴趣,我日后再单独分类讨论。暂时就用这个吧! idx = D_y & D_m & D_d & D_hr & D_mi & D_se ' 中间的检查和判断,我就此跳过,直接看写入XML文档。 if tt = "" or pt = "" or ct = "" then msg = "新闻标题、发布人和内容为必填项目。" Response.Write "<script>alert(""" & msg & "\n\n页面将自动返回..."");window.location = 'post.asp';</script>" else SourceFile = Server.MapPath("nnDB.xml") Set objXML = Server.CreateObject("Microsoft.XMLDOM") objXML.load(SourceFile) If objXML.parseError.ErrorCode <> 0 Then objXML.loadXML "<?xml version=""1.0"" encoding=""GB2312""?><data><news></news></data>" End If Set objRootlist = objXML.documentElement.selectSingleNode("news") If objRootlist.hasChildNodes then id = objRootlist.lastChild.firstChild.text + 1 Else id=1 End If Set oListNode = objXML.documentElement.selectSingleNode("news").AppendChild(objXML.createElement("item")) Set oDetailsNode = oListNode.appendChild(objXML.createElement("id")) oDetailsNode.Text = id Set oDetailsNode = oListNode.appendChild(objXML.createElement("index")) oDetailsNode.Text = idx Set oDetailsNode = oListNode.appendChild(objXML.createElement("time")) oDetailsNode.Text = time_now Set oDetailsNode = oListNode.appendChild(objXML.createElement("title")) oDetailsNode.Text = tt Set oDetailsNode = oListNode.appendChild(objXML.createElement("poster")) oDetailsNode.Text = pt Set oDetailsNode = oListNode.appendChild(objXML.createElement("content")) oDetailsNode.Text = objXML.createCDATASection(ct).text Set oDetailsNode = oListNode.appendChild(objXML.createElement("hit")) oDetailsNode.Text = 0 objXML.save(SourceFile) Set objXML = nothing msg = "新闻信息成功已写入。" Response.Write "<script>alert(""" & msg & "\n\n页面将自动返回..."");window.location = 'post.asp';</script>" end if %> ---------------------------------------save_DB.asp--------------------------------------- 好,至此,三页文件,基本完成。一个小型发布系统基本成型了,在这个基础上,可以开发出很多东西,简单的如留言本等等。 简单的说明一下: 在post.asp页面内,style部分,就是制定新闻列表的CSS样式表,大家不需要把注意力放在上面。接着就是建立dom对象,然后读取文件。后半段,是一个输入表单。 今天的重点是:save_DB.asp。 首先是objXML.loadXML "<?xml version=""1.0"" encoding=""GB2312""?><data><news></news></data>",这里是选择读取XML文档<data><news>开始到</news></data>结束,中间这部分的元素,应该很容易理解。 接着,我们再单独读取news标记下的所有元素,并返回第一个元素。.hasChildNodes方法是用来检查,选定的节点下是否存在子节点。是,则根据最后一个<item>节点内的第一个节点的值,+1,形成新新闻的表内索引号。否则,则表示这个节点内没有任何子节点,那么表内索引自然从1开始。这个做法是不是科学,我们暂且不做详细的讨论,和新闻数据的索引,作为日后讨论的重点(个人认为,这并不是最好的做法,有一些严重的漏洞。)。 然后,就到重头戏了。Set oListNode = objXML.documentElement.selectSingleNode("news").AppendChild(objXML.createElement("item")),这里实际包含了两步的操作,首先从根节点新创建一个节点,接着同时创建一个名为item的元素,成为该节点……为什么?呃……能不能不说啊……然后依次创建item节点下的子节点,及节点中的内容。最后写入XML文档,于此,已完成一个简单的写入。值得讨论的地方不多,不过下面贴一些DOM的对象和方法的简略说明,知道一下就可以了。 documentElement 属性 确认XML 文件的根(Root)节点。 selectSingleNode 传回第一个符合样式的节点。 loadXML 方法 加载一个XML 文件或字符串的片断。 haschildnodes 方法 如果指定的节点有一个或更多子节点,传回值为true。 createElement 方法 建立一个指定名称的元素。 AppendChild 方法 加上一个节点当作指定节点最后的子节点。 createCDATASection 方法 建立一个包含特定数据的CDATA。
| |||||||||||
| >> 相关文章 | |||||||||||
|
授权使用:汉南在线 http://www.hzwz.net/(2008-2009) Copyright (c) 2002-2007 汉南在线. All Rights Reserved . 经营许可证:陕ICP备05000109号 Powered by:汉南在线 |