精灵巫婆 发表于 2015-1-16 22:20:11

ASP教程之xml惯例使用之asp读写文档

ASP由于使用了COM组件所以它会变的十分强大,但是这样的强大由于WindowsNT系统最初的设计问题而会引发大量的安全问题。只要在这样的组件或是操作中一不注意,哪么外部攻击就可以取得相当高的权限而导致网站瘫痪或者数据丢失;xml一个复杂的旧事公布体系的提及:

起首,我们创建一个XML文档,定名为nnDB.xml:

---------------------------------------nnDB.xml---------------------------------------
  <?xmlversion="1.0"encoding="GB2312"?>
  <data><news></news></data>

---------------------------------------nnDB.xml---------------------------------------

接着,做一个公布的页面,这个公布页面连带了有旧事的显现列表,把他定名为post.asp吧!

---------------------------------------post.asp---------------------------------------
  <style>
  #news_list{width:430px;float:left;border:1pxsolid#CFCFCF;}
  #tt{width:300px;float:left;border-top:2pxsolid#CFCFCF;}
  #pt{width:129px;float:right;border-top:2pxsolid#CFCFCF;}
  #ct{width:430px;float:left;border-top:1pxsolid#CFCFCF;}
  #news_listlispan{font-size:12px;letter-spacing:1px;font-family:Tahoma;}
  #c1{width:40px;float:left;padding:5px0px5px0px;background-color:#EFEFEF;font-weight:bold;color:#666;text-align:center;border:1pxsolid#FFF;}
  #c2{float:left;padding:5px;font-size:12px;color:#333;text-align:center;letter-spacing:1px;border:1pxsolid#FFF;}
  #c3{width:380px;float:right;margin:0px5px0px5px;padding:3px0px3px0px;text-align:right;color:#CCC;border-top:1pxdotted#CFCFCF;}
  </style>
  <%
    SetXMLOBJ=Server.CreateObject("Microsoft.XMLDOM")
    XMLOBJ.async=False
    XMLOBJ.loadServer.MapPath("nnDB.xml")
    Setnews_root=XMLOBJ.documentElement.selectSingleNode("news")
    news_count=news_root.childNodes.length
    
    HTML_CODE="<divid=""news_list"">"
    fori=0tonews_count-1
      Settemp_news=news_root.childNodes.item(i).childNodes
      HTML_CODE=HTML_CODE&"<liid=""tt""><spanid=""c1"">题目</span><spanid=""c2"">"&temp_news.item(3).text&"</span></li><liid=""pt""><spanid=""c1"">作者</span><spanid=""c2"">"&temp_news.item(4).text&"</span></li>"
      HTML_CODE=HTML_CODE&"<liid=""ct""><spanid=""c1"">内容</span><spanid=""c2"">"&temp_news.item(5).text&"</span><spanid=""c3"">宣布工夫:"&temp_news.item(2).text&" 点击量:"&temp_news.item(6).text&"</span></li>"
    next
    HTML_CODE=HTML_CODE&"</div>"
    Response.writeHTML_CODE
  %>

  <formid="form1"name="form1"method="post"action="save_DB.asp">
  <p>旧事题目:<inputtype="text"name="tt"/></p>
  <p>旧事<inputtype="text"name="pt"/></p>
  <p>旧事内容:<textareaname="ct"cols="50"rows="12"></textarea></p>
  <p><inputtype="submit"name="Submit"value="提交"/><inputtype="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文档。
  iftt=""orpt=""orct=""then
    msg="旧事题目、公布人和内容为必填项目。"
    Response.Write"<script>alert("""&msg&"

页面将主动前往..."");window.location=post.asp;</script>"
  else
  SourceFile=Server.MapPath("nnDB.xml")
  SetobjXML=Server.CreateObject("Microsoft.XMLDOM")
  objXML.load(SourceFile)

  IfobjXML.parseError.ErrorCode0Then
      objXML.loadXML"<?xmlversion=""1.0""encoding=""GB2312""?><data><news></news></data>"
    EndIf
    
    SetobjRootlist=objXML.documentElement.selectSingleNode("news")
    
    IfobjRootlist.hasChildNodesthen
      id=objRootlist.lastChild.firstChild.text+1
    Else
      id=1
    EndIf
    
    SetoListNode=objXML.documentElement.selectSingleNode("news").AppendChild(objXML.createElement("item"))
    SetoDetailsNode=oListNode.appendChild(objXML.createElement("id"))
    oDetailsNode.Text=id
    SetoDetailsNode=oListNode.appendChild(objXML.createElement("index"))
    oDetailsNode.Text=idx
    SetoDetailsNode=oListNode.appendChild(objXML.createElement("time"))
    oDetailsNode.Text=time_now
    SetoDetailsNode=oListNode.appendChild(objXML.createElement("title"))
    oDetailsNode.Text=tt
    SetoDetailsNode=oListNode.appendChild(objXML.createElement("poster"))
    oDetailsNode.Text=pt
    SetoDetailsNode=oListNode.appendChild(objXML.createElement("content"))
    oDetailsNode.Text=objXML.createCDATASection(ct).text
    SetoDetailsNode=oListNode.appendChild(objXML.createElement("hit"))
    oDetailsNode.Text=0
    
    objXML.save(SourceFile)
    
    SetobjXML=nothing
    
    msg="旧事信息乐成已写进。"
    Response.Write"<script>alert("""&msg&"

页面将主动前往..."");window.location=post.asp;</script>"
  endif
%>

---------------------------------------save_DB.asp---------------------------------------

好,至此,三页文件,基础完成。一个小型公布体系基础成型了,在这个基本上,能够开辟出良多器材,复杂的如留言本等等。

复杂的申明一下:

在post.asp页面内,style部分,就是制订旧事列表的CSS款式表,人人不必要把注重力放在下面。接着就是创建dom工具,然后读取文件。后半段,是一个输出表单。

明天的重点是:save_DB.asp。

起首是objXML.loadXML"<?xmlversion=""1.0""encoding=""GB2312""?><data><news></news></data>",这里是选择读取XML文档<data><news>入手下手到</news></data>停止,两头这部分的元素,应当很简单了解。

接着,我们再独自读取news标志下的一切元素,并前往第一个元素。.hasChildNodes办法是用来反省,选定的节点下是不是存在子节点。是,则依据最初一个<item>节点内的第一个节点的值,+1,构成新旧事的表内索引号。不然,则暗示这个节点内没有任何子节点,那末表内索引天然从1入手下手。这个做法是否是迷信,我们临时不做具体的会商,和旧事数据的索引,作为往后会商的重点(团体以为,这并非最好的做法,有一些严峻的毛病。)。

然后,就到重头戏了。SetoListNode=objXML.documentElement.selectSingleNode("news").AppendChild(objXML.createElement("item")),这里实践包括了两步的操纵,起首从根节点新创立一个节点,接着同时创立一个名为item的元素,成为该节点……为何?呃……能不克不及不说啊……然后顺次创立item节点下的子节点,及节点中的内容。最初写进XML文档,于此,已完成一个复杂的写进。值得会商的中央未几,不外上面贴一些DOM的工具和办法的大略申明,晓得一下就能够了。

documentElement属性     确认XML文件的根(Root)节点。
selectSingleNode        传回第一个切合款式的节点。
loadXML办法          加载一个XML文件或字符串的片段。
haschildnodes办法       假如指定的节点有一个或更多子节点,传回值为true。
createElement办法       创建一个指命名称的元素。
AppendChild办法        加上一个节点看成指定节点最初的子节点。
createCDATASection办法    创建一个包括特定命据的CDATA。无法实现跨操作系统的应用。当然这也是微软的理由之一,只有这样才能发挥ASP最佳的能力。可是我却认为正是Windows限制了ASP,ASP的概念本就是为一个能让系统运行于一个大的多样化环境而设计的;

兰色精灵 发表于 2015-1-19 08:59:06

Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")

愤怒的大鸟 发表于 2015-1-26 12:54:27

ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:

乐观 发表于 2015-2-4 16:30:59

Response:从字面上讲是“响应”,因此这个是服务端向客户端发送东西的,例如Response.Write

因胸联盟 发表于 2015-2-10 04:05:21

代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。

金色的骷髅 发表于 2015-2-28 19:17:56

作为IE上广为流传的动态网页开发技术,ASP以它简单易学博得了广大WEB程序爱好这的青睐,而且它对运行环境和开发品台的不挑剔,以及有大量有效的参考手册,极大的推广了它的发展。

莫相离 发表于 2015-3-10 06:35:17

用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。

若相依 发表于 2015-3-17 05:09:05

代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。

灵魂腐蚀 发表于 2015-3-23 21:39:16

学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点:
页: [1]
查看完整版本: ASP教程之xml惯例使用之asp读写文档