+ -
当前位置:首页 → 问答吧 → 最强对Xml操作的类,可创建无限级Xml结点,有实例(ASP代码)

最强对Xml操作的类,可创建无限级Xml结点,有实例(ASP代码)

时间:2005-05-18

来源:互联网

最强对Xml操作的类,可创建无限级Xml结点,有实例(ASP代码)   [ 日期:2005-05-09 ]   [ 来自: ] [作者:cexo255]

<%
'对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数据的实例(原创)   [ 日期:2005-05-11 ]   [ 来自: ] [作者:cexo255]

写出一个用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

http://www.uamstudio.com/Forums/4651/ShowPost.aspx

就这个都比你的早,其他就不说了

作者: Richard_cheung   发布时间: 2005-05-24

最后,告诉你原作者不是国内的。

作者: Richard_cheung   发布时间: 2005-05-24

何必呢 人家不一定认得老外的名字...

作者: remoon   发布时间: 2005-05-24

翻了一下楼主的 BLOG 发现还真不是一般的无耻
你知道SHOWO 是谁不?

作者: remoon   发布时间: 2005-05-24

搂主肯定知道,但是估计修改别人的版权的时候,没改清楚。
建议下次用工具替换整个目录下所有文件,修改Showo为你自己的名字好了。

作者: Richard_cheung   发布时间: 2005-05-25

别忘了
你看到的里面是有一点叶子的代码
其它大部分代码都是我写的,
还有他的JS文件本人并没有加上本人的名子,本人一点都没动。

只要是本人改过的代码中有大部分代码本人改过,本人就加入了名子。

我在此发出来是让大家学习的
如果我来点BB的事,我也不会发出来让大家看,丢我的人 ,我。

不想学我的代码,可以让楼主给删了。

不过还是谢谢楼上提出的意见。以后我也会注意的。

作者: cexo255   发布时间: 2005-05-29

Loveyuki 的 blog 程序吧?改改界面就变成 Copyright © RelaxLife.Net 了,郁闷

作者: dron   发布时间: 2005-05-30

说过一次了,不管你怎么搬代码都要注明作者和出处。
其实最主要的还是自己能学到里面的精华,不要一味的职责别人哦。^_^

作者: JSTOP   发布时间: 2005-05-30

谢谢,指教

作者: cexo255   发布时间: 2005-06-05



QUOTE:
引用内容由 [i]JSTOP[/i] 发表于 2005-5-30 08:39
说过一次了,不管你怎么搬代码都要注明作者和出处。
其实最主要的还是自己能学到里面的精华,不要一味的职责别人哦。^_^

没错,改别人东西不要注明版权是自已的就行了(这样做人是有点不厚道),自已在改的过程中才能领悟原作者的一些想法,这就是我的观点!

作者: 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



QUOTE:
引用内容由 [i]kancnspace[/i] 发表于 2005-11-27 15:24
请保留原作这的版权部分。修改也要注明修改的基础。

遇到同样的问题,求救

作者: jamesyqf   发布时间: 2006-07-10