当前位置: 首页 > 图文教程 > 网络编程 > ASP > ASP+XML实例演练编程代码

ASP
asp分页(自己整理的2个分页程序)
ASP常用的系统配置函数
雨哲防采集策略之列表篇
雨哲浅谈关于防采集而不影响收录内容篇
asp数据库连接函数
ajax XMLHTTP Post Form时的表单乱码综合解决
ASP注入详细命令40条
用ASP实现MSSQL用户密码破解
ASP创建对象的两种方法比较
ASP字符串转换为整形、双精度型、布尔
ASP计算str2在str1中出现的次数
asp采集抓取网上房产信息的代码
ASP注册登陆实例代码
ASP中使用FileSystemObject时提高性能的方法
分享一个好东东,动态Include文件 (Dynamic File Includes)
解决 JScript 中使用日期类型数据时出现类型错误的问题
在ASP里面创建GUID
在JScript中使用缓存技术的实际代码
ASP javascript Application对象的Contents和StaticObjects做Cache的一些经验
海阳2006+功能中的潜水王

ASP+XML实例演练编程代码


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 104 ::
收藏到网摘: n/a

实例演练ASP+XML编程
本文是一篇实例讲解的文章。作为一个普通的程序员,我深知,一个优秀的例程,对于正在学习编程的人是多么的有帮助。本文中使用的例程,是一个联系信息管理程序,我也是写来以方便自己和朋友们互相联系用的。但麻雀虽小,五脏俱全,相信对正在学习ASP+XML编程的朋友们,还是具备一定的参考价值的。
  读者可以通过此实例,了解在ASP(Active Server Page)中如何操纵XML文件,并进行数据的各种处理,包括XML节点的建立、修改、删除和保存等等。文中涉及到的技术包括ASP,VBScript,DOM,XML和XSL等。
  本文未对使用到的技术进行深入的理论介绍,因此,读者需要具备一定的相关知识,尤其是对ASP、XML和DOM应该有一定的了解。通读本文,并参考源代码,相信读者一定可以熟练地掌握XML编程。
  一、程序说明
  例程基于B/S结构,使用XML文件存储联系信息,然后通过一个VBScript写的Class,使用DOM,对XML文件中的联系信息进行各种操作。
  例程提供的代码采用了统一的命名规范,主要包括:用三个字母的缩写说明变量类型,如数字类型——int,字符串类型——str,对象——obj,等等,虽然在ASP/VBScript中,不区分数据类型,但使用明显的数据类型说明,对程序的编写和维护还是很有意义的;使用有意义的变量名称,如XMLDocument对象,定义为objXmlDoc,等等,同样,这样做的也是为了更好地编写和维护程序。
  此程序可以分为后台数据处理和前台界面表现两部分。
  程序后台,使用VBScript编写了一个Class,这是在VBScript5.0版中提供的新特性。虽然这里Class的概念和真正的面向对象相去甚远,但是,在ASP中合理地使用Class,还是可以在一定程度上提高程序的运行效率和可维护性。
  前台表现,使用XSL对XML文件中的数据进行了格式化,然后以HTML的形式输出到客户端,充分体现了XML技术带来的灵活性与可定制性。格式化的过程放在了服务器端,使用ASP程序完成,这样,客户端得到的是经过格式化之后的HTML信息,避免了兼容性问题的出现。
  当然,程序对于具体的操作细节未作非常严格的检验,比如联系信息必填项的检查,但是,对于在ASP中使用DOM操作XML的有关部分,程序提供了完整的示例代码。
  二、XML文件说明(persons.xml)
  例程中使用到的XML文件结构十分简单,并且没有定义相关的Schema或者DTD,因为,对于此程序这是不必要的。当然,如果读者愿意自己定义一个的话,也不会对程序的运行产生影响。
  程序的数据结构定义如下,Persons集合,它包含多个Person对象,每一个Person对象包括姓名Name、英文名Nick、手机Mobile、电话Tel、电子邮件Email、腾讯QQ和所在公司Company的属性。将以上定义对应到XML文件即,Persons为根节点,Person为Persons的子节点,Name、Nick、Mobile、Tel、Email、QQ和Company为Person的子节点。
  这样,我们得到的XML文件内容如下:
  <?xml version="1.0" encoding="gb2312"?>
  <Persons>
    <Person>
       <Name>小东</Name>
      <Nick>gwd</Nick>
      <Mobile>139XXXXXXXX</Mobile>
      <Tel>XXXXXXXX</Tel>
      <Email>[email protected]</Email>
      <QQ>7066015</QQ>
      <Company>XXX</Company>
    <Person>
  </Person>
  读者需要注意<?xml version="1.0" encoding="gb2312"?>这一行,XML默认不支持中文,通过设置encoding属性,才可以使XML正确地显示中文。读者可以在IE5.0及以上版本的浏览器中访问此文件,它会以 树型结构把数据显示出来。
转自:动态网制作指南www.knowsky.com
转自:动态网制作指南www.knowsky.com
  三、格式转换XSL文件说明(Persons.xsl)
  例程中使用XSL对XMl数据进行格式化,并以HTML的形式返回到客户端。这个过程也可以放在客户端进行,但考虑到兼容性的问题,例程中采用了在服务器端通过ASP操纵DOM进行格式化的方法。
  XSL文件的内容如下,
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/Persons">
<script language="javascript">
 function add()
 {
  window.open("add.asp", "add", "width=300,height=320,resize=no");
 }
 function edit(intId)
 {
  window.open("edit.asp?id="+intId, "edit", "width=300,height=320,resize=no");
 }
</script>
<table width="600" border="0" align="center">
 <tr>
  <td align="right"><a href="javascript:add();" title="添加新联系人">添加新联系人</a>  </td>
 </tr>
</table>
<table align="center" width="680" cellspacing="1" cellpadding="2" border="0" bgcolor="#666600">
 <tr class="title" bgcolor="#E5E5E5">
  <td width="25"><xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;</td>
  <td>姓名</td>
  <td>英文名</td>
  <td>手机</td>
  <td>电话</td>
  <td>Email</td>
  <td>QQ</td>
  <td>所在公司</td>
 </tr>
 <xsl:for-each select="Person">
 <TR BGCOLOR="#FFFFFF">
  <TD ALIGN="right"><xsl:value-of select="position()"/></TD>
  <TD STYLE="color:#990000"><A><xsl:attribute name="HREF">javascript:edit('<xsl:value-of select="position()"/>');</xsl:attribute><xsl:attribute name="title">修改信息  </xsl:attribute><xsl:value-of select="Name"/></A></TD>
  <TD><xsl:value-of select="Nick"/></TD>
  <TD><xsl:value-of select="Mobile"/></TD>
  <TD><xsl:value-of select="Tel"/></TD>
  <TD><A><xsl:attribute name="HREF">mailto:<xsl:value-of select="Email"/></xsl:attribute><xsl:value-of select="Email"/></A></TD>
  <TD><xsl:value-of select="QQ"/></TD>
  <TD><xsl:value-of select="Company"/></TD>
 </TR>
 </xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
  在服务器端的转换使用一个函数来完成,格式化成功,返回HTML字符串,格式化失败,打印出错误信息,如下,
'*******************************************
' 说明:使用XSL文件格式化XML文件。
' 作者:gwd 2002-11-05
' 参数:strXmlFile -- Xml文件,路径+文件名
' strXslFile -- Xsl文件,路径+文件名
' 返回:成功 -- 格式化后的HTML字符串
' 失败 -- 自定义的错误信息
'*******************************************
Function FormatXml(strXmlFile, strXslFile)
 Dim objXml, objXsl
 strXmlFile = Server.MapPath(strXmlFile)
 strXslFile = Server.MapPath(strXslFile)
 Set objXml = Server.CreateObject("MSXML2.DOMDocument")
 Set objXsl = Server.CreateObject("MSXML2.DOMDocument")
 objXML.Async = False
 If objXml.Load(strXmlFile) Then
  objXsl.Async = False
  objXsl.ValidateonParse = False
  If objXsl.Load(strXslFile) Then
   On Error Resume Next ' 捕获transformNode方法的错误
   FormatXml = objXml.transformNode(objXsl)
   If objXsl.parseError.errorCode <> 0 Then
    Response.Write "<br><hr>"
    Response.Write "Error Code: " & objXsl.parseError.errorCode
    Response.Write "<br>Error Reason: " & objXsl.parseError.reason
    Response.Write "<br>Error Line: " & objXsl.parseError.line
    FormatXml = "<span class=""alert"">格式化XML文件错误!</span>"
   End If
  Else
   Response.Write "<br><hr>"
   Response.Write "Error Code: " & objXsl.parseError.errorCode
   Response.Write "<br>Error Reason: " & objXsl.parseError.reason
   Response.Write "<br>Error Line: " & objXsl.parseError.line
   FormatXml = "<span class=""alert"">装载XSL文件错误!</span>"
  End If
 Else
  Response.Write "<br><hr>"
  Response.Write "Error Code: " & objXml.parseError.errorCode
  Response.Write "<br>Error Reason: " & objXml.parseError.reason
  Response.Write "<br>Error Line: " & objXml.parseError.line
  FormatXml = "<span class=""alert"">装载XML文件错误!</span>"
 End If
 Set objXsl = Nothing
 Set objXml = Nothing
End Function

  四、操作Xml数据的Cls_Person类说明(clsPerson.asp)
  Cls_Person类用来完成与联系人信息相关的各种操作,包括添加、修改和删除等等,它使用VBScript编写。Cls_Person包括Id、Name、Nick、Mobile、Tel、Email、QQ和Company属性,对应于XML文件中的Person节点。Cls_Person包括GetInfoFromXml、AddToXml、EditToXml和DeleteFormXml四个主要方法,分别完成获取信息,添加信息,修改信息和删除信息四个功能。
  Cls_Person的具体实现如下,
'***************************************************
' 说明:Person类
' 作者:gwd 2002-11-06
' 引用:pub/constpub.asp
'***************************************************
Class Cls_Person
Private m_intId ' Id,对应Person节点在Persons集合中的位置
Private m_strName ' 姓名
Private m_strNick ' 英文名
Private m_strMobile ' 手机
Private m_strTel ' 电话
Private m_strEmail ' 电子邮件
Private m_strQQ ' QQ号
Private m_strCompany ' 所在公司
Private m_strError ' 出错信息
' 类初始化
Private Sub Class_Initialize()
 m_strError = ""
 m_intId = -1
End Sub
' 类释放
Private Sub Class_Terminate()
 m_strError = ""
End Sub
'-----读写各个属性---------------------------
Public Property Get Id
 Id = m_intId
End Property
Public Property Let Id(intId)
 m_intId = intId
End Property
Public Property Get Name
Name = m_strName
End Property
Public Property Let Name(strName)
 m_strName = strName
End Property
Public Property Get Nick
 Nick = m_strNick
End Property
Public Property Let Nick(strNick)
 m_strNick = strNick
End Property
Public Property Get Mobile
 Mobile = m_strMobile
End Property
Public Property Let Mobile(strMobile)
 m_strMobile = strMobile
End Property
Public Property Get Tel
 Tel = m_strTel
End Property
Public Property Let Tel(strTel)
 m_strTel = strTel
End Property
Public Property Get Email
 Email = m_strEmail
End Property
Public Property Let Email(strEmail)
 m_strEmail = strEmail
End Property
Public Property Get QQ
 QQ = m_strQQ
End Property
Public Property Let QQ(strQQ)
 m_strQQ = strQQ
End Property
Public Property Get Company
 Company = m_strCompany
End Property
Public Property Let Company(strCompany)
 m_strCompany = strCompany
End Property
'-----------------------------------------------
' 获取错误信息
Public Function GetLastError()
 GetLastError = m_strError
End Function
' 私有方法,添加错误信息
Private Sub AddErr(strEcho)
 m_strError = m_strError + "<Div CLASS=""alert"">" & strEcho & "</Div>"
End Sub
' 清除错误信息
Public Function ClearError()
 m_strError = ""
End Function
' 从Xml中读取指定节点的数据,并填充各个属性
' 需要首先设置Id
Public Function GetInfoFromXml(objXmlDoc)
 Dim objNodeList
 Dim I
 ClearError
 If objXmlDoc Is Nothing Then
  GetInfoFromXml = False
  AddErr "Dom对象为空值"
  Exit Function
 End If
 If CStr(m_intId) = "-1" Then
  GetInfoFromXml = False
  AddErr "未正确设置联系人对象的ID属性"
  Exit Function
 Else
  I = m_intId - 1 ' 要读取得节点位置
 End If
 ' 选择并读取节点信息,赋予各个属性
 Set objNodeList = objXmlDoc.getElementsByTagName("Person")
 If objNodeList.length - m_intId >= 0 Then
  On Error Resume Next
  m_strName = objNodeList(I).selectSingleNode("Name").Text
  m_strNick = objNodeList(I).selectSingleNode("Nick").Text
  m_strMobile = objNodeList(I).selectSingleNode("Mobile").Text
  m_strTel = objNodeList(I).selectSingleNode("Tel").Text
  m_strEmail = objNodeList(I).selectSingleNode("Email").Text
  m_strQQ = objNodeList(I).selectSingleNode("QQ").Text
  m_strCompany = objNodeList(I).selectSingleNode("Company").Text
  GetInfoFromXml = True
 Else
  GetInfoFromXml = False
  AddErr "获取联系信息发生错误"
  Set objNodeList = Nothing
  Exit Function
 End If
 Set objNodeList = Nothing
End Function
' 添加信息到XML文件中
' 需要首先设置好要填充的属性
Public Function AddToXml(objXmlDoc)
 Dim objPerson, objNode
 ClearError
 If objXmlDoc Is Nothing Then
  AddToXml = False
  AddErr "Dom对象为空值"
  Exit Function
 End If
 ' 创建Person节点
 Set objPerson = objXmlDoc.createElement("Person")
 objXmlDoc.documentElement.appendChild objPerson
 ' 创建各个子节点
 '-----------------------------------------------------
 Set objNode = objXmlDoc.createElement("Name")
 objNode.Text = m_strName
 objPerson.appendChild objNode
 Set objNode = objXmlDoc.createElement("Nick")
 objNode.Text = m_strNick
 objPerson.appendChild objNode
 Set objNode = objXmlDoc.createElement("Mobile")
 objNode.Text = m_strMobile
 objPerson.appendChild objNode
 Set objNode = objXmlDoc.createElement("Tel")
 objNode.Text = m_strTel
 objPerson.appendChild objNode
 Set objNode = objXmlDoc.createElement("Email")
 objNode.Text = m_strEmail
 objPerson.appendChild objNode
 Set objNode = objXmlDoc.createElement("QQ")
 objNode.Text = m_strQQ
 objPerson.appendChild objNode
 Set objNode = objXmlDoc.createElement("Company")
 objNode.Text = m_strCompany
 objPerson.appendChild objNode
 '-----------------------------------------------------
 Set objNode = Nothing
 Set objPerson = Nothing
  On Error Resume Next
 objXmlDoc.save Server.MapPath(C_XMLFILE) '保存XML文件
 If Err.Number = 0 Then
  AddToXml = True
 Else
  AddToXml = False
  AddErr Err.Description
 End If
End Function
' 从XML文件中删除数据
' 需要首先设置Id
Public Function DeleteFromXml(objXmlDoc)
 Dim objNodeList, objNode
 ClearError
 If objXmlDoc Is Nothing Then
  DeleteFromXml = False
  AddErr "Dom对象为空值"
  Exit Function
 End If
 If CStr(m_intId) = "-1" Then
  DeleteFromXml = False
  AddErr "未正确设置联系人对象的ID属性"
  Exit Function
 End If
 Set objNodeList = objXmlDoc.getElementsByTagName("Person")
 If objNodeList.length - m_intId < 0 Then
  DeleteFromXml = False
  AddErr "未找到相应的联系人"
  Set objNodeList = Nothing
  Exit Function
 End If
 On Error Resume Next
 Set objNode = objXmlDoc.documentElement.removeChild(objNodeList(intId-1))
 If objNode Is Nothing Then
  DeleteFromXml = False
  AddErr "删除联系人失败"
  Set objNodeList = Nothing
  Exit Function
 Else
  objXmlDoc.save Server.MapPath(C_XMLFILE)
 End If
 Set objNode = Nothing
 Set objNodeList = Nothing
 If Err.Number = 0 Then
  DeleteFromXml = True
 Else
  DeleteFromXml = False
  AddErr Err.Description
 End If
End Function
' 修改XML文件中的数据
' 需要首先设置好Id
Public Function EditToXml(objXmlDoc)
 Dim objPersonList, objOldPerson, objNewPerson, objNode
 ClearError
 If objXmlDoc Is Nothing Then
  EditToXml = False
  AddErr "Dom对象为空值"
  Exit Function
 End If
 If CStr(m_intId) = "-1" Then
  EditToXml = False
  AddErr "未正确设置联系人对象的ID属性"
  Exit Function
 End If
 Set objPersonList = objXmlDoc.getElementsByTagName("Person")
 If objPersonList.length - m_intId < 0 Then
  DeleteFromXml = False
  AddErr "未找到相应的联系人"
  Set objPersonList = Nothing
  Exit Function
 End If
 Set objOldPerson = objPersonList(m_intId-1) ' 要修改的旧节点
 Set objNewPerson = objXmlDoc.createElement("Person") ' 用来替换旧节点的新节点
 Set objNode = objXmlDoc.createElement("Name")
 objNode.Text = m_strName
 objNewPerson.appendChild objNode
 Set objNode = objXmlDoc.createElement("Nick")
 objNode.Text = m_strNick
 objNewPerson.appendChild objNode
 Set objNode = objXmlDoc.createElement("Mobile")
 objNode.Text = m_strMobile
 objNewPerson.appendChild objNode
 Set objNode = objXmlDoc.createElement("Tel")
 objNode.Text = m_strTel
 objNewPerson.appendChild objNode
 Set objNode = objXmlDoc.createElement("Email")
 objNode.Text = m_strEmail
 objNewPerson.appendChild objNode
 Set objNode = objXmlDoc.createElement("QQ")
 objNode.Text = m_strQQ
 objNewPerson.appendChild objNode
 Set objNode = objXmlDoc.createElement("Company")
 objNode.Text = m_strCompany
 objNewPerson.appendChild objNode
 On Error Resume Next
 ' 进行替换
 Set objNode = objXmlDoc.documentElement.replaceChild(objNewPerson, objOldPerson)
 If objNode Is Nothing Then
 EditToXml = False
 AddErr "修改联系人失败"
 Set objOldPerosn = Nothing
 Set objNewPerson = Nothing
 Set objPersonList = Nothing
 Exit Function
Else
 objXmlDoc.save Server.MapPath(C_XMLFILE)
End If
Set objOldPerson = Nothing
Set objNewPerson = Nothing
Set objPersonList = Nothing
If Err.Number = 0 Then
 EditToXml = True
Else
 EditToXml = False
 AddErr Err.Description
End If
End Function
End Class

  五、程序首页(default.asp)
  调用相应的包含文件和公共函数,格式化XML文件,并进行显示。可以看到,页面Title是可定制的,公共的头部和尾部都做成了相应的包含文件。C_TITLE、C_XMLFILE和C_XSLFILE为公共常量,在constpub.asp文件中定义,至于它们的意义,相信读者可以很容易地明白。这里调用了上面定义的FormatXml函数。
<% Option Explicit
'***********************************************
' 说明:通讯录
' 作者:gwd 2002-11-05
'***********************************************
%>
<!--#include file="pub/funcxml.asp"-->
<!--#include file="pub/constpub.asp"-->
<HTML>
<HEAD>
<TITLE><% = C_TITLE %></TITLE>
<META HTTP-EQUIV="content-type" CONTENT="text/html;charset=GB2312"/>
<link rel="stylesheet" href="contact.css" type="text/css">
</HEAD>
<BODY>
<!--#include file="pub/header.asp"-->
<% = FormatXml(C_XMLFILE, C_XSLFILE) %>
<br>
<!--#include file="pub/footer.asp"-->
</BODY>
</HTML>
  六、添加、修改和删除XML中的信息
  我们知道,在Cls_Person中已经定义了相应的方法,因此,在各个文件中,只需要调用对应的方法即可。添加信息的文件为add.asp,修改信息的文件为edit.asp,删除信息的文件为delete.asp,我们仅以add.asp文件为例进行说明。其中的CheckStrInput和CheckStrOutput函数,用来格式化用户的输入和输出字符串。
<% Option Explicit
'***********************************************
' 说明:37080308通讯录
' 作者:gwd 2002-11-05
'***********************************************
%>
<!--#include file="pub/funcxml.asp"-->
<!--#include file="pub/constpub.asp"-->
<!--#include file="pub/funcpub.asp"-->
<!--#include file="pub/class/clsPerson.asp"-->
<%
 Dim objXml, objPerson
 Dim strErr
 Set objXml = Server.CreateObject("MSXML2.DOMDocument")
 Set objPerson = New Cls_Person ' 生成Cls_Person对象
 If Request.Form("btnOk") <> "" Then
  If LoadXmlDoc(objXml, C_XMLFILE, False, strErr) Then ' 装载XML文件
   ' 给相应的属性赋值
   objPerson.Name = CheckStrInput(Request.Form("txtName"))
   objPerson.Nick = CheckStrInput(Request.Form("txtNick"))
   objPerson.Mobile = CheckStrInput(Request.Form("txtMobile"))
   objPerson.Tel = CheckStrInput(Request.Form("txtTel"))
   objPerson.Email = CheckStrInput(Request.Form("txtEmail"))
   objPerson.QQ = CheckStrInput(Request.Form("txtQQ"))
   objPerson.Company = CheckStrInput(Request.Form("txtCompany"))
   If Not objPerson.AddToXml(objXml) Then ' 调用Cls_Person类的AddToXml方法,添加数据
    AddErr strErr, objPerson.GetLastError
   Else
    AddErr strErr, "添加成功"
    Response.Write "<script language=""javascript"">opener.location.reload();</script>"
   End If
  End If
 End If
 Set objXml = Nothing
%>
<HTML>
<HEAD>
<TITLE><% = C_TITLE %></TITLE>
<META HTTP-EQUIV="content-type" CONTENT="text/html;charset=GB2312"/>
<link rel="stylesheet" href="contact.css" type="text/css">
<script language="javascript">
<!--
function CheckForm()
{
 return true;
}
//-->
</script>
</HEAD>
<BODY>
<% = strErr %>
<div class="title">添加联系信息</div>
<form name="form1" method="post" action="add.asp" onsubmit="return CheckForm()">
 <table align="center" width="100%" cellspacing="1" cellpadding="2" border="0" bgcolor="#666600">
  <tr bgcolor="#ffffff">
   <td width="25%" bgcolor="#e5e5e5" align="right"><b>姓名:</b></td>
   <td width="75%"><input type="text" name="txtName" size="25" class="input" value="<%=CheckStrOutput(objPerson.Name)%>"></td>
  </tr>
  <tr bgcolor="#ffffff">
   <td bgcolor="#e5e5e5" align="right"><b>英文名:</b></td>
   <td><input type="text" name="txtNick" size="25" class="input" value="<%=CheckStrOutput(objPerson.Nick)%>"></td>
  </tr>
  <tr bgcolor="#ffffff">
   <td bgcolor="#e5e5e5" align="right"><b>手机:</b></td>
   <td><input type="text" name="txtMobile" size="25" class="input" value="<%=CheckStrOutput(objPerson.Mobile)%>"></td>
  </tr>
  <tr bgcolor="#ffffff">
   <td bgcolor="#e5e5e5" align="right"><b>电话:</b></td>
   <td><input type="text" name="txtTel" size="25" class="input" value="<%=CheckStrOutput(objPerson.Tel)%>"></td>
  </tr>
  <tr bgcolor="#ffffff">
   <td bgcolor="#e5e5e5" align="right"><b>Email:</b></td>
   <td><input type="text" name="txtEmail" size="25" class="input" value="<%=CheckStrOutput(objPerson.Email)%>"></td>
  </tr>
  <tr bgcolor="#ffffff">
   <td bgcolor="#e5e5e5" align="right"><b>QQ:</b></td>
   <td><input type="text" name="txtQQ" size="25" class="input" value="<%=CheckStrOutput(objPerson.QQ)%>"></td>
  </tr>
  <tr bgcolor="#ffffff">
   <td bgcolor="#e5e5e5" align="right"><b>所在公司:</b></td>
   <td><input type="text" name="txtCompany" size="25" class="input" value="<%=CheckStrOutput(objPerson.Company)%>"></td>
  </tr>
 </table>
 <br>
 <div align="center">
 <input type="submit" name="btnOk" value="提交">
 <input type="button" name="btnClose" value="关闭" onclick="javascript:return window.close();">
 </div>
</form>
</BODY>
</HTML>
<%
Set objPerson = Nothing
%>
  七、总结
  到此,我们的联系信息管理程序就大功告成了。怎么样,感觉如何,应该来说还是相当简单的吧。当然了,这个例程还有许多可以改进的地方,我这里也只不过是抛砖引玉,希望读者在掌握了XML编程之后,自行修改完善吧。
  此例程已经在我本机(Windows Server 2000、IIS5.0和IE6.0)和网上进行了测试,都能够正常运行。