最强对Xml操作的类,可创建无限级Xml结点,有实例(ASP代码)
时间:2005-05-18
来源:互联网
<%
'对Xml操作的类,可创建无限级Xml结点,有实例。此代码不知道是哪个仁兄编写的,没有留下出处。
'现在本人给改了改,并加入了出处,请不要怪小弟。
Rem =================================================================
Rem = 类:clsXML
Rem = 说明:对Xml操作的类,可创建无限级Xml结点,有实例(ASP代码)
Rem = Revision:1.01 Beta
Rem = 作者:熊氏英雄(cexo255)
Rem = Date:2005/05/6 18:38:10
Rem = QQ:30133499
Rem = MySite:Http://www.Relaxlife.net
Rem = 下载:http://www.relaxlife.net/2005/relaxlife/blogview.asp?logID=189
Rem = QQ群:4341998
Rem = 适用:对Xml操作,可创建无限级Xml结点,修改结点属性,修改结点值,删除结点等操作
Rem =================================================================
Class clsXML
'局部变量定义
Private strFile, objDoc
'*********************************************************************
' 类初始化及注销时的事件
'*********************************************************************
Private Sub Class_Initialize()
strFile = ""
End Sub
Private Sub Class_Terminate()
'注销Xml对象objDoc
Set objDoc = Nothing
End Sub
'*********************************************************************
' 属性
'*********************************************************************
'设置Xml文件路径并建立Xml对象objDoc
Public Property Let File(str)
Set objDoc = Server.CreateObject("Microsoft.XMLDOM")
objDoc.async = False
strFile = str
objDoc.Load strFile
End Property
'获取Xml文件路径
Public Property Get File()
File = strFile
End Property
'*********************************************************************
' 函数
'*********************************************************************
'创建Xml文件strPath,并加入一个根结点strRoot
Public Function createFile(strPath, strRoot)
On Error Resume Next
Dim objFSO, objTextFile
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.CreateTextFile(strPath, True)
If Err Then
Call ErrMsg("在 createFile(" & strPath & ", " & strRoot & ") 时出错。错误提示:" & Err.Description)
End If
objTextFile.WriteLine("<?xml version=""1.0"" encoding=""GB2312""?>")
objTextFile.WriteLine("<" & strRoot & "/>")
objTextFile.Close
Me.File = strPath
Set objTextFile = Nothing
Set objFSO = Nothing
End Function
'返回结点名为strXPath(含条件)结点下的所有值加子结点值
Public Function getField(strXPath)
On Error Resume Next
Dim objNodeList, arrResponse(), i
Set objNodeList = objDoc.documentElement.selectNodes(strXPath)
ReDim arrResponse(objNodeList.length)
For i = 0 To objNodeList.length - 1
arrResponse(i) = objNodeList.item(i).Text
Next
If Err Then
Call ErrMsg("在 getField(" & strXPath & ") 时出错。错误提示:" & Err.Description)
End If
getField = arrResponse
End Function
'修改结点名为strXPath(含条件)结点的值
Public Function updateField(strXPath, strData)
On Error Resume Next
Dim objField
For Each objField In objDoc.documentElement.selectNodes(strXPath)
If Err Then
Call ErrMsg("在 updateField(" & strXPath & ", " & strData & ") 时出错。错误提示:" & Err.Description)
End If
objField.Text = strData
Next
objDoc.Save strFile
Set objField = Nothing
updateField = True
End Function
'为根结点创建子结点strNode(不带属性)
Public Function createRootChild(strNode)
On Error Resume Next
Dim objChild
Set objChild = objDoc.createNode(1, strNode, "")
objDoc.documentElement.appendChild(objChild)
If Err Then
Call ErrMsg("在 createRootChild(" & strNode & ") 时出错。错误提示:" & Err.Description)
End If
objDoc.Save strFile
Set objChild = Nothing
End Function
'为根结点创建带属性的子结点strNode(带属性),属性名为:attr属性值为:val
Public Function createRootNodeWAttr(strNode, attr, val)
On Error Resume Next
Dim objChild, objAttr
Set objChild = objDoc.createNode(1, strNode, "")
If IsArray(attr) And IsArray(val) Then
If UBound(attr)-LBound(attr) <> UBound(val)-LBound(val) Then
Exit Function
Else
Dim i
For i = LBound(attr) To UBound(attr)
Set objAttr = objDoc.createAttribute(attr(i))
objChild.setAttribute attr(i), val(i)
Next
End If
Else
Set objAttr = objDoc.createAttribute(attr)
objChild.setAttribute attr, val
End If
If Err Then
Call ErrMsg("在 createRootNodeWAttr(" & strNode & ", " & attr & ", " & val &") 时出错。错误提示:" & Err.Description)
End If
objDoc.documentElement.appendChild(objChild)
objDoc.Save strFile
Set objChild = Nothing
End Function
'为指定的结点strXPath(含条件)创建子结点strNode(不带属性)
Public Function createChildNode(strXPath, strNode)
On Error Resume Next
Dim objParent, objChild
For Each objParent In objDoc.documentElement.selectNodes(strXPath)
If Err Then
Call ErrMsg("在 createChildNode(" & strXPath & ", " & strNode &") 时出错。错误提示:" & Err.Description)
End If
Set objChild = objDoc.createNode(1, strNode, "")
objParent.appendChild(objChild)
Next
objDoc.Save strFile
Set objParent = Nothing
Set objChild = Nothing
End Function
'为指定的结点strXPath(含条件)创建带属性的子结点strNode(带属性),属性名为:attr属性值为:val
Public Function createChildNodeWAttr(strXPath, strNode, attr, val)
On Error Resume Next
Dim objParent, objChild, objAttr
For Each objParent In objDoc.documentElement.selectNodes(strXPath)
If Err Then
Call ErrMsg("在 createChildNodeWAttr(" & strXPath & "," & strNode & "," & attr & "," & val & ") 时出错。错误提示:" & Err.Description)
End If
Set objChild = objDoc.createNode(1, strNode, "")
If IsArray(attr) And IsArray(val) Then
If UBound(attr)-LBound(attr) <> UBound(val)-LBound(val) Then
Exit Function
Else
Dim i
For i = LBound(attr) To UBound(attr)
Set objAttr = objDoc.createAttribute(attr(i))
objChild.SetAttribute attr(i), val(i)
Next
End If
Else
Set objAttr = objDoc.createAttribute(attr)
objChild.setAttribute attr, val
End If
objParent.appendChild(objChild)
Next
objDoc.Save strFile
Set objParent = Nothing
Set objChild = Nothing
End Function
'删除指定的结点strXPath(含条件)
Public Function deleteNode(strXPath)
On Error Resume Next
Dim objOld
For Each objOld In objDoc.documentElement.selectNodes(strXPath)
If Err Then
Call ErrMsg("在删除结点 " & strXPath & " 时出错。 错误提示:" & Err.Description)
End If
objDoc.documentElement.removeChild objOld
Next
objDoc.Save strFile
Set objOld = Nothing
End Function
'错误提示信息(消息)
Private Sub ErrMsg(msg)
Response.Write msg
Response.End
End Sub
End Class
%>
<%@ Language=VBScript %>
<% Option Explicit %>
<!--#INCLUDE FILE="clsXML.asp"-->
<%
Rem =================================================================
Rem = 类:clsXML
Rem = 说明:对Xml操作的类,可创建无限级Xml结点,有实例(ASP代码)
Rem = Revision:1.01 Beta
Rem = 作者:熊氏英雄(cexo255)
Rem = Date:2005/05/6 18:38:10
Rem = QQ:30133499
Rem = MySite:Http://www.Relaxlife.net
Rem = 下载:http://www.relaxlife.net/2005/relaxlife/blogview.asp?logID=189
Rem = QQ群:4341998
Rem = 适用:对Xml操作,可创建无限级Xml结点,修改结点属性,修改结点值,删除结点等操作
Rem =================================================================
Dim objXML, strPath, str
Set objXML = New clsXML
strPath = Server.MapPath(".") & "\NewXml.xml"
objXML.createFile strPath, "html"
'创建Xml文件strPath,并加入一个根结点Html
objXML.createRootChild "head"
'创建根结点的子结点head
objXML.createChildNodeWAttr "head", "Img", "Width", "1"
'创建head结点的标记Img,并添加属性Width=1
objXML.updateField "head//Img[@Width=1]", "super.gif"
'修改head结点下标记为Img的值为:super.gif 条件:Width=1
objXML.createRootNodeWAttr "Body", Array("Size", "Length", "Width"), Array(24, 31, 30)
'创建根结点的子结点Body,并添加属性Size=24,Length=31,Width=30
objXML.createRootNodeWAttr "Body", Array("Size", "Length", "Width"), Array(24, 30, 29)
'创建根结点的子结点Body,并添加属性Size=24,Length=30,Width=29
objXML.createRootNodeWAttr "Body", Array("Size", "Length", "Width"), Array(24, 31, 85)
'创建根结点的子结点Body,并添加属性Size=24,Length=31,Width=85
objXML.updateField "Body[@Size=24]", "24's"
'修改Body结点下所有标记值为:24's 条件:Size=24
objXML.createChildNodeWAttr "Body[@Size=24 and @Length=31]", "A", Array("Wood", "Metal", "Color"), Array("Cedar", "Aluminum", "Green")
'创建Body结点的标记A,并添加属性Wood=Cedar,Metal=Aluminum,Color=Green, 条件:Size=24 and Length=31
objXML.updateField "Body//A[@Wood='Cedar']", "A"
'修改Body结点下标记为A的值为:A 条件:Wood='Cedar'
objXML.createChildNodeWAttr "Body//A", "A2", Array("Wood", "Metal", "Color"), Array("Cedar", "Aluminum", "Green")
'创建Body//A结点的标记A2,并添加属性Wood=Cedar,Metal=Aluminum,Color=Green, 条件:无
objXML.updateField "Body//A//A2[@Wood='Cedar']", "A2"
objXML.createChildNode "Body//A","Img3"
'objXML.deleteNode("Body[@Length=31]")
'删除子结点
'返回结点名为Body结点下的所有值加子结点值
For Each str In objXML.getField("Body[@Size=24]")
Response.Write(str & "<br>")
Next
Set objXML = Nothing
Response.Redirect "NewXml.xml"
%>
作者: cexo255 发布时间: 2005-05-18
写出一个用ASP+XML调用Access数据的实例
也就是说
从数据库中读出数据,写到XML文件中
然后在从XML中读出并显示。
下载地址:http://www.relaxlife.net/2005/relaxlife/blogview.asp?logID=196
作者: cexo255 发布时间: 2005-05-18
作者: cexo255 发布时间: 2005-05-23
作者: Richard_cheung 发布时间: 2005-05-24
就这个都比你的早,其他就不说了
作者: Richard_cheung 发布时间: 2005-05-24
作者: Richard_cheung 发布时间: 2005-05-24
作者: remoon 发布时间: 2005-05-24
你知道SHOWO 是谁不?
作者: remoon 发布时间: 2005-05-24
建议下次用工具替换整个目录下所有文件,修改Showo为你自己的名字好了。
作者: Richard_cheung 发布时间: 2005-05-25
你看到的里面是有一点叶子的代码
其它大部分代码都是我写的,
还有他的JS文件本人并没有加上本人的名子,本人一点都没动。
只要是本人改过的代码中有大部分代码本人改过,本人就加入了名子。
我在此发出来是让大家学习的
如果我来点BB的事,我也不会发出来让大家看,丢我的人 ,我。
不想学我的代码,可以让楼主给删了。
不过还是谢谢楼上提出的意见。以后我也会注意的。
作者: cexo255 发布时间: 2005-05-29
作者: dron 发布时间: 2005-05-30
其实最主要的还是自己能学到里面的精华,不要一味的职责别人哦。^_^
作者: JSTOP 发布时间: 2005-05-30
作者: cexo255 发布时间: 2005-06-05
说过一次了,不管你怎么搬代码都要注明作者和出处。
其实最主要的还是自己能学到里面的精华,不要一味的职责别人哦。^_^
没错,改别人东西不要注明版权是自已的就行了(这样做人是有点不厚道),自已在改的过程中才能领悟原作者的一些想法,这就是我的观点!
作者: superhgh2003 发布时间: 2005-11-24
作者: kancnspace 发布时间: 2005-11-27
对不起,该数据库已经存在!E:\host\XML_DBTest1.01\XML_DB\\Link.mdb
新建 Link 表错误,原因表 'Link' 已存在。
新建 Link 表中字段错误,请手动将数据库中 ID 字段建立,属性为 int Not null,原因字段 'ID' 已经存在于表 'Link' 中。
新建 Link 表中字段错误,请手动将数据库中 LinkName 字段建立,属性为 Varchar(50),原因字段 'LinkName' 已经存在于表 'Link' 中。
新建 Link 表中字段错误,请手动将数据库中 LinkURL 字段建立,属性为 Varchar(100),原因字段 'LinkURL' 已经存在于表 'Link' 中。
在 Link 将字段ID 添加为主键时出错,原因主控键已存在。请手工修改该字段属性。
错误提示:由于将在索引、 主关键字、或关系中创建重复的值,请求对表的改变没有成功。 改变该字段中的或包含重复数据的字段中的数据,删除索引或重新定义索引以允许重复的值并再试一次。
错误提示:由于将在索引、 主关键字、或关系中创建重复的值,请求对表的改变没有成功。 改变该字段中的或包含重复数据的字段中的数据,删除索引或重新定义索引以允许重复的值并再试一次。
错误提示:由于将在索引、 主关键字、或关系中创建重复的值,请求对表的改变没有成功。 改变该字段中的或包含重复数据的字段中的数据,删除索引或重新定义索引以允许重复的值并再试一次。
错误提示:由于将在索引、 主关键字、或关系中创建重复的值,请求对表的改变没有成功。 改变该字段中的或包含重复数据的字段中的数据,删除索引或重新定义索引以允许重复的值并再试一次。
错误提示:由于将在索引、 主关键字、或关系中创建重复的值,请求对表的改变没有成功。 改变该字段中的或包含重复数据的字段中的数据,删除索引或重新定义索引以允许重复的值并再试一次。
Response 对象 错误 'ASP 0156 : 80004005'
HTTP 头错误
/XML_DBTest1.01/XML_DB/DB_Page/RLManDBCls.asp,行 76
已将 HTTP 头输出到客户端浏览器。任何对 HTTP 头的修改都必须在输出页内容之前进行。
作者: lishuqiang 发布时间: 2005-12-10
操作系统的开发商都死光了吗??
作者: phh_huayi 发布时间: 2006-05-08
请保留原作这的版权部分。修改也要注明修改的基础。
遇到同样的问题,求救
作者: jamesyqf 发布时间: 2006-07-10
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28