实例演练ASP+XML编程比较全的了第1/2页
程序员文章站
2022-06-15 15:47:02
本文是一篇实例讲解的文章。作为一个普通的程序员,我深知,一个优秀的例程,对于正在学习编程的人是多么的有帮助。本文中使用的例程 ,是一个联系信息管理程序,我也是写来以方便自己...
本文是一篇实例讲解的文章。作为一个普通的程序员,我深知,一个优秀的例程,对于正在学习编程的人是多么的有帮助。本文中使用的例程
,是一个联系信息管理程序,我也是写来以方便自己和朋友们互相联系用的。但麻雀虽小,五脏俱全,相信对正在学习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"?>这一行,xml默认不支持中文,通过设置encoding属性,才可以使xml正确地显示
中文。读者可以在ie5.0及以上版本的浏览器中访问此文件,它会以 树型结构把数据显示出来。
三、格式转换xsl文件说明(persons.xsl)
例程中使用xsl对xml数据进行格式化,并以html的形式返回到客户端。这个过程也可以放在客户端进行,但考虑到兼容性的问题,例程中
采用了在服务器端通过asp操纵dom进行格式化的方法。
xsl文件的内容如下,
在服务器端的转换使用一个函数来完成,格式化成功,返回html字符串,格式化失败,打印出错误信息,如下,
四、操作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的具体实现如下,
,是一个联系信息管理程序,我也是写来以方便自己和朋友们互相联系用的。但麻雀虽小,五脏俱全,相信对正在学习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>
<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及以上版本的浏览器中访问此文件,它会以 树型结构把数据显示出来。
三、格式转换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>
<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
' 说明:使用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
' 说明: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
1
下一篇: 深入浅出理解PHP原理之变量赋值