xml常规应用之asp读写文档

xml

一个简单的新闻发布系统的说起:

首先,我们建立一个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。

时间: 2024-12-22 19:04:32

xml常规应用之asp读写文档的相关文章

利用ASP改进文档上载控件 (转)

控件 利用ASP改进文档上载控件 随着互联网的发展,人们发布和获取信息的方式发生了根本的变化,越来越多的人开始把网络作为最重要的发布和获取信息的途径,同时,能发布并令信息共享的技术也越来越多.虽然这些技术为开发人员带来了极大的便利,但是由于种种原因,其中有些技术还存在着这样或那样的缺陷.因此,开发人员在选择和使用各种技术时,一定要认清这些技术的优点和局限性,取长补短,才能设计出功能完善的程序. 提出问题 笔者曾在建设企业内部信息网工程中开发过基于Web的文档资源共享信息网站.该网站要求上载的文档

利用ASP改进文档上载控件

控件 随着互联网的发展,人们发布和获取信息的方式发生了根本的变化,越来越多的人开始把网络作为最重要的发布和获取信息的途径,同时,能发布并令信息共享的技术也越来越多.虽然这些技术为开发人员带来了极大的便利,但是由于种种原因,其中有些技术还存在着这样或那样的缺陷.因此,开发人员在选择和使用各种技术时,一定要认清这些技术的优点和局限性,取长补短,才能设计出功能完善的程序. 提出问题 笔者曾在建设企业内部信息网工程中开发过基于Web的文档资源共享信息网站.该网站要求上载的文档能自动在主页中根据文档的类别

用ASP实现文档资料管理

一.前言本文用ASP技术实现文档资料管理技术主要有四个方面:(1)将公司的所有的文件资料按类分好录入数据库,本文采用的是Access数据库.(2)利用ASP的ADO组件访问数据库,利用SQL语句对数据库进行查询.(3)利用WEB页和IIS,将查询结果在用户的浏览器显示出来.(4)利用Javascript 实现下拉式菜单.二.具体实现1.数据库设计本文采用Access 数据库,按照公司的文件类型,分成10大类,每类分10小类,用10大类建立10个相应的表.每个表的定义如下:  表名 字段1 字段2

Open XML应用安全(4)文档校验

当Office应用程序打开一个Office文档的时候,首先会进行校验,主要校验的是该文档的有效性和完整性. 当随便将一个exe文档的后缀改为docx时候,打开该文件肯定会报文件无效.对于一个Open XML文档,如果想去校验它,可以从如下几个方面: q  是不是ZIP压缩包 q  必须的部件是否存在 q  关系是否完整 q  部件类型是否匹配 q  文件大小 q  宏和OLE对象 验证的方式也很多,这里给出最简单的方法,使用Open XML SDk中的OpenXmlValidator对象.代码清

用asp编写文档搜索页面

页面 查询语言 通过在查询表格中键入单词或短语,然后单击按钮执行查询,就可以在 Web 站点中搜索任意的单词或短语(例如,查询表格示例中的"执行查询"按钮).本节将介绍以下主题: 逻辑和相近运算符:显示如何通过插入逻辑和相近运算符执行更精确的查询. 通配符:帮助您查找包含与所给单词相似的单词的页. 自由文本查询: 说明如何基于短语的意思来表述一个查询,而不是用精确的单词. 矢量空间查询:解释如何获得与单词和短语列表匹配的查询结果. 属性值查询:告诉您如何查询文件的属性值. 查询示例:给

如何用ASP生成XML数据文档

一.必须弄清楚最终需要的是什么 我们通过asp或其他动态编程语言,最终需要的是XML格式的数据,这点和XML数据所在的文件载体无关,它可以是实实在在的XML文件,比如:http://www.dw8.cn/common/dw8.xml .也可以为asp文档,比如:http://www.cnbruce.com/blog/rss2.asp 他们都是XML数据的体现,为了实现XML数据的动态,所以需要使用到动态编程语言,比如ASP来实现生成它. 二.如何生成动态的XML文档 如果是生成XML文件,介于动

如何用ASP生成XML数据文档(RSS订阅)

rss|xml|生成xml|数据 一.必须弄清楚最终需要的是什么 我们通过asp或其他动态编程语言,最终需要的是XML格式的数据,这点和XML数据所在的文件载体无关,它可以是实实在在的XML文件,比如:http://www.xrss.cn/WebRss.Asp.也可以为asp文档,比如:http://www.xrss.cn/WebRss.Asp?SortId=5 他们都是XML数据的体现,为了实现XML数据的动态,所以需要使用到动态编程语言,比如ASP来实现生成它. 二.如何生成动态的XML文档

ASP生成XML数据文档

一.必须弄清楚最终需要的是什么      我们通过asp或其他动态编程语言,最终需要的是XML格式的数据,这点和XML数据所在的文件载体无关,它可以是实实在在的XML文件,比如:/rss_1.xml .也可以为asp文档,比如:/rss.asp?id=42      他们都是XML数据的体现,为了实现XML数据的动态,所以需要使用到动态编程语言,比如ASP来实现生成它.      二.如何生成动态的XML文档      如果是生成XML文件,介于动态文档是ASP格式的,所以必须借助FSO进行XM

asp 读取xml文档实例代码

<%  h=GetLocationURL()  h1=Split(h,"/")  h=Replace(h,h1(UBound(h1)),"note.xml")    Set http=Server.CreateObject("Microsoft.XMLHTTP")  http.Open "GET",h,False  http.send    Set xml=Server.CreateObject("Micros