ASP+XML实例演练编程代码第1/3页
程序员文章站
2022-03-10 14:29:01
实例演练asp+xml编程 本文是一篇实例讲解的文章。作为一个普通的程序员,我深知,一个优秀的例程,对于正在学习编程的人是多么的有帮助。本文中使用的例程,是一个联系信息管理...
实例演练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>gwd@chinaren.com</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
本文是一篇实例讲解的文章。作为一个普通的程序员,我深知,一个优秀的例程,对于正在学习编程的人是多么的有帮助。本文中使用的例程,是一个联系信息管理程序,我也是写来以方便自己和朋友们互相联系用的。但麻雀虽小,五脏俱全,相信对正在学习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>gwd@chinaren.com</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
1