ASP操作xml--显示xml文件中的所有节点

 更新时间:2016年9月20日 19:06  点击:1917

通常是利用数据库来保存数据,但也可以使用xml文件来保存数据。假设xml文件的内容是:
test.xml
<?xml version="1.0" encoding="gb2312"?>
<site>
 <root>
   <list>
     <id>0</id>
     <name>新浪</name>
     <url>http://www.sina.com.cn</url>
     <time>2007-11-1 10:10:10</time>
   </list>
   <list>
     <id>1</id>
     <name>google</name>
     <url>http://www.google.cn</url>
     <time>2007-11-2 11:11:11</time>
   </list>
  </root>
</site>

用来显示xml中的内容的asp文件
index.asp
<style>
body {font-size:12px;}
</style>
<%
strSourceFile = Server.MapPath("./") & "test.xml"
'获取XML文件的路径这里根据你的虚拟目录不同而不同
Set objXML = Server.CreateObject("Microsoft.FreeThreadedXMLDOM")
'以自由线程创建一个XML对像
objXML.load(strSourceFile)'把XML文件读入内存
Set objRootsite = objXML.documentElement.selectSingleNode("root")
'选取root节点
num=objRootsite.childNodes.length-1
For i=0 To num
 response.write "网站名:"&objRootsite.childNodes.item(i).childNodes.item(1).text&"   <a href=""javascript:delxml("&objRootsite.childNodes.item(i).childNodes.item(0).text&")"">删除</a> <a href=""editxml.asp?id="&objRootsite.childNodes.item(i).childNodes.item(0).text&""">修改</a>
"
 response.write "网址:"&objRootsite.childNodes.item(i).childNodes.item(2).text&"
"
 response.write "添加时间:"&objRootsite.childNodes.item(i).childNodes.item(3).text&"

"
next
%>
<script>
function delxml(id)
{
  if(!confirm("确定要删除吗?")) return false;
  location.href='delxml.asp?id='+id;
}
</script>

注意:index.asp要与test.xml文件放在同一目录下。

数据库中表名ly,字段名y_username,y_message,y_time
index.html
<HTML>
 <HEAD>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  <TITLE> My Documents </TITLE>
 </HEAD>
 <style>
 <!--
 body {font-size:12px;}
 -->
 </style>

 <BODY>
  <form name="form1" method="post">
  <input type="text" name="search">&nbsp;<input type="button" value="查询" onclick="javascript:f1()">
  </form>
  <div id="disp">
  </div>
 </BODY>
</HTML>
<script language="javascript">
function f1()
{
 if(document.form1.search.value=="")
 {
  alert('请输入要查询的内容');
  return false;
 }

 var xmlhttp;
 var search;
 var s="";
 search=document.form1.search.value;
   var xmlhttp;
  try
  {
   xmhttp=new ActiveXObject("Msxml2.XMLHTTP");
  }
  catch (e)
  {
    try
    {
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch (e)
    {
      try
      {
    xmlhttp=new XMLHttpRequest();
      }
      catch (e)
      {
      }
    }
  }
   xmlhttp.onreadystatechange=function()
   {
    if(4==xmlhttp.readyState)
    {
      if(200==xmlhttp.status)
   {
      var xmldoc=xmlhttp.responseXML;
   var message_nodes=xmldoc.getElementsByTagName("message");
   var n_messages=message_nodes.length;
   for (i=0;i<n_messages;i++)
   {
   var user_node=message_nodes[i].getElementsByTagName("user")[0].firstChild.data;
   var text_node=message_nodes[i].getElementsByTagName("text")[0].firstChild.data;
   var time_node=message_nodes[i].getElementsByTagName("time")[0].firstChild.data;
   s=s+"<b>用户名:</b>"+user_node+"<br><b>留言:</b>"+text_node+"<br><b>发言时间:</b>"+time_node+"<br><br>";
   }   
    document.getElementById("disp").innerHTML=s;  
   }
   else
   {
     alert(xmlhttp.status);
   }
    }
   }
   var url="search.asp?search="+escape(search)+"&t="+new Date().getTime();
   xmlhttp.open("get",url);
   xmlhttp.send(null);
}
</script>

search.asp
<!--#include file="adoconn.asp"-->
<%
 text=Trim(request("search"))
 sql="select y_username,y_message,y_time from ly where y_username like '%"&text&"%' order by y_time desc"
 rs.open sql,conn,1,1
 If rs.eof Then
  str="error"
 Else
  Response.ContentType="text/xml"
  str="<?xml version=""1.0"" encoding=""gb2312""?>"&vbnewline
  str=str&"<root>"&vbnewline
  i=1
  Do While Not rs.eof
   str=str&"<message id="""&i&""">"&vbnewline
   str=str&"  <user>"&rs("y_username")&"</user>"&vbnewline
   str=str&"  <text>"&rs("y_message")&"</text>"&vbnewline
   str=str&"  <time>"&rs("y_time")&"</time>"&vbnewline
   str=str&"</message>"&vbnewline
  i=i+1
  rs.movenext
  loop
  str=str&"</root>"
  End If  
  response.write str
  rs.close
  set rs = nothing
  conn.close
  set conn = nothing
%>
对于小数据量,xml文件在检索更新上于ACCESS有很多优势。 

我曾经测试过不用数据库,把网站的会员信息,商品数据信息,交易信息,网站定制信息全部存放在三个xml文件中,运行结果十分正常,感觉上比数据库快多了,不过没有作测试,不能确定。 

下面说一下创建,查询,修改等对xml操作的主要方法 

’创建DOM对象 
set objDom=server.CreateObject("MicroSoft.XMLDom") 

’取得xml数据 
’方法1 取得xml文件的xml数据 
objDom.load("c:test.xml") 
’方法2 取得xml数据串的数据 
objDom.loadxml("<people><man name="sd"/></people>") 

’创建一个节点对象 
Set Newnode=objDom.CreateElement("people") 
’给这个节点赴值 
Newnode.Text="人" 
’ 给这个节点添加属性 
Set NewAttribute=objDom.CreateNode("attribute","name","") 
NewAttribute.Text= "张三" 
Newnode.SetAttributeNode NewAttribute 
’给这个节点添加子节点 
Set NewnodeChild=objDom.CreateElement("address") 
Newnode.appendChild NewnodeChild 
’保存这个节点对象 
objDom.appendChild Newnode 
objDom.save("c:test.xml") 

’查找一个节点对象 
set objtofind=objdom.documentElement.SelectSingleNode("//people/man") 
’取出这个节点对象的 节点名,节点值,某个属性值,和全部的xml 
nodename=objtofind.nodename 
nodevalue=objtofind.text 
objtofind.GetAttributeNode("name").Nodevalue ’属性名为name的属性值 

’取出一个属性节点对象 
set objattrtofind=objdom.documentElement.SelectSingleNode("//people/man"). GetAttributeNode("name") 
’取出这个节点的属性名,属性值 
nodeattrname=objattrtofind.nodename 
nodeattrvalue=objattrtofind.nodevalue 

’删除一个节点对象 
set objnode=objdom.documentElement.SelectSingleNode("//people/man") ’要删除的节点 
set objparentnode=objdom.documentElement.SelectSingleNode("//people") ’要删除的节点的父节点 
objparentnode.removeChild objnode 

’取出一个节点的字节点集合 
set objnodes=objdom.documentElement.SelectSingleNode("//people/man").ChildNodes 

遍历这个集合 
方法1 
for each element in objnodes 
response.write element.nodename 字节点名 
response.write element.text 字节点值 

next 
方法2 

domlength=objnodes.length 
for i = 0 to domlength-1 
response.write objnodes.childnodes(i).nodename 字节点名 
response.write objnodes.childnodes(i).text 字节点值 
next 

取出一个节点的属性集合 

set objnodes=objdom.documentElement.SelectSingleNode("//people/man").GetAttributeNode("name").attributes 

遍历这个集合 

for each element in objnodes 
response.write element.nodename 属性名 
response.write element.nodevalue 属性值 
next 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> 修改xml内容 </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
 </HEAD>

 <BODY>
  <!--#include file="top.asp"-->
 <%
 id=request("id")
 if IsNumeric(id)=false or isNull(id) then
response.write ("参数不正确,请返回!")
response.end
end if 
addok=request("addok")
If addok="" Or IsNull(addok) then
   strSourceFile = Server.MapPath("./") & "test.xml"
  '获取XML文件的路径这里根据你的虚拟目录不同而不同
  Set objXML = Server.CreateObject("Microsoft.FreeThreadedXMLDOM")
 '以自由线程创建一个XML对像
 objXML.load(strSourceFile)'把XML文件读入内存
 Set objRootsite = objXML.documentElement.selectSingleNode("root")
 id=objRootsite.childNodes.item(id).childNodes.item(0).text
 site=objRootsite.childNodes.item(id).childNodes.item(1).text
 url=objRootsite.childNodes.item(id).childNodes.item(2).text
%>
  <form name="form1" method="post" action="?addok=edit&id=<%=id%>">
  网站名:<input type="text" name="site" value="<%=site%>" size="30">

  网  址:<input type="text" name="url" value="<%=url%>" size="40">

  <input type="submit" value="修改"> <input type="reset" value="重置">
  </form>
<%
End If
If addok="edit" Then
  site=request("site")
  url=request("url")
  strSourceFile = Server.MapPath("./") & "test.xml"
  '获取XML文件的路径这里根据你的虚拟目录不同而不同
  Set objXML = Server.CreateObject("Microsoft.XMLDOM")
  '创建XML对像
  objXML.load(strSourceFile)
  '把XML文件读入内存中
  Set objRootlist = objXML.documentElement.selectSingleNode("root")
  set rootOldNode=objRootlist.childNodes.item(id) 
  brstr=chr(13)&chr(10)&chr(9)
  XMLnode=brstr&"<list>"&vbnewline & _
     "<id>"&id&"</id>"&vbnewline & _
"<name>"&site&"</name>"&vbnewline & _
"<url>"&url&"</url>"&vbnewline & _
"<time>"&Replace(Replace(Now(),"上午 ",""),"下午 ","")&"</time>"&vbnewline & _
"</list>"&vbnewline&vbnewline
  '根据得到的数据建立XML片段
set objXML2=Server.CreateObject("Microsoft.XMLDOM")
'建立一个新XML对像
objXML2.loadXML(XMLnode)
'把XML版片段读入内存中
set rootNewNode=objXML2.documentElement
'获得objXML2的根节点
objRootlist.ReplaceChild rootNewNode,rootOldNode
'修改test.xml
objXML.save(strSourceFile)
'存储test.xml文件(因为不存储test.xml只在内存中更新了)
set objXML=nothing
set objXML2=nothing
Response.Redirect("index.asp")
response.end

End if
%>
 </BODY>
</HTML>

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • AI源文件转photoshop图像变模糊问题解决教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
  • jQuery实现广告显示和隐藏动画

    这篇文章主要为大家详细介绍了jQuery实现广告显示和隐藏动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-07-05
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
  • C#使用StreamWriter写入文件的方法

    这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
  • ant design中upload组件上传大文件,显示进度条进度的实例

    这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29
  • php实现文件下载实例分享

    举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07
  • C#路径,文件,目录及IO常见操作汇总

    这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 查找php配置文件php.ini所在路径的二种方法

    通常php.ini的位置在:复制代码 代码如下:/etc目录下或/usr/local/lib目录下。如果你还是找不到php.ini或者找到了php.ini修改后不生效(其实是没找对),请使用如下办法:1.新建php文件,写入如下代码复制代码 代码如下:<?phpe...2014-05-31