前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >xml操作类(转载)

xml操作类(转载)

作者头像
Java架构师必看
发布2021-03-22 11:18:02
8380
发布2021-03-22 11:18:02
举报
文章被收录于专栏:Java架构师必看

作者:未知  请与本人联系ClassXMLDOMDocument PrivatefNode

作者:未知   请与本人联系 <% Class XMLDOMDocument   Private fNode,fANode   Private fErrInfo,fFileName,fOpen   Dim XmlDom '返回节点的缩进字串   Private Property Get TabStr(byVal Node)     TabStr=""     If Node Is Nothing Then Exit Property     If not Node.parentNode Is nothing Then TabStr="  "&TabStr(Node.parentNode)   End Property '返回一个子节点对象,ElementOBJ为父节点,ChildNodeObj要查找的节点,IsAttributeNode指出是否为属性对象   Public Property Get ChildNode(byVal ElementOBJ,byVal ChildNodeObj,byVal IsAttributeNode)     Dim Element     Set ChildNode=Nothing     If IsNull(ChildNodeObj) Then       If IsAttributeNode=false Then         Set ChildNode=fNode       Else         Set ChildNode=fANode       End If       Exit Property     ElseIf IsObject(ChildNodeObj) Then       Set ChildNode=ChildNodeObj       Exit Property     End If     Set Element=Nothing     If LCase(TypeName(ChildNodeObj))="string" and Trim(ChildNodeObj)<>"" Then       If IsNull(ElementOBJ) Then          Set Element=fNode       ElseIf LCase(TypeName(ElementOBJ))="string" Then          If Trim(ElementOBJ)<>"" Then            Set Element=XmlDom.selectSingleNode("//"&Trim(ElementOBJ))            If Lcase(Element.nodeTypeString)="attribute" Then Set Element=Element.selectSingleNode("..")          End If       ElseIf IsObject(ElementOBJ) Then          Set Element=ElementOBJ       End If       If Element Is Nothing Then         Set ChildNode=XmlDom.selectSingleNode("//"&Trim(ChildNodeObj))       ElseIf IsAttributeNode=true Then         Set ChildNode=Element.selectSingleNode("./@"&Trim(ChildNodeObj))       Else         Set ChildNode=Element.selectSingleNode("./"&Trim(ChildNodeObj))       End If     End If   End Property '读取最后的错误信息   Public Property Get ErrInfo     ErrInfo=fErrInfo   End Property

'给xml内容   Public Property Get xmlText(byVal ElementOBJ)     xmlText=""     If fopen=false Then Exit Property     Set ElementOBJ=ChildNode(XmlDom,ElementOBJ,false)     If ElementOBJ Is Nothing Then Set ElementOBJ=XmlDom

    xmlText=ElementOBJ.xml   End Property '================================================================= '类初始化   Private Sub Class_Initialize()     Set XmlDom=CreateObject("Microsoft.XMLDOM")     XmlDom.preserveWhiteSpace=true     Set fNode=Nothing     Set fANode=Nothing

    fErrInfo=""     fFileName=""     fopen=false   End Sub

'类释放   Private Sub Class_Terminate()     Set fNode=Nothing     Set fANode=Nothing     Set XmlDom=nothing     fopen=false   End Sub '===================================================================== '建立一个XML文件,RootElementName:根结点名。XSLURL:使用XSL样式地址 '返回根结点 Function Create(byVal RootElementName,byVal XslUrl)     Dim PINode,RootElement     Set Create=Nothing     If (XmlDom Is Nothing) Or (fopen=true) Then Exit Function     If Trim(RootElementName)="" Then RootElementName="Root"     Set PINode=XmlDom.CreateProcessingInstruction("xml", "version=""1.0""  encoding=""GB2312""")     XmlDom.appendChild PINode

    Set PINode=XMLDOM.CreateProcessingInstruction("xml-stylesheet", "type=""text/xsl"" href="""&XslUrl&"""")     XmlDom.appendChild PINode

    Set RootElement=XmlDom.createElement(Trim(RootElementName))     XmlDom.appendChild RootElement     Set Create=RootElement     fopen=True set fNode=RootElement   End Function '开打一个已经存在的XML文件,返回打开状态 Function Open(byVal xmlSourceFile)     Open=false     xmlSourceFile=Trim(xmlSourceFile)     If xmlSourceFile="" Then Exit Function

    XmlDom.async = false     XmlDom.load xmlSourceFile     fFileName=xmlSourceFile

    If not IsError Then        Open=true        fopen=true     End If   End Function '关闭   Sub Close()     Set fNode=Nothing     Set fANode=Nothing

    fErrInfo=""     fFileName=""     fopen=false   End Sub '读取一个NodeOBJ的节点Text的值 'NodeOBJ可以是节点对象或节点名,为null就取当前默认fNode Function getNodeText(byVal NodeOBJ)     getNodeText=""     If fopen=false Then Exit Function     Set NodeOBJ=ChildNode(null,NodeOBJ,false)     If NodeOBJ Is Nothing Then Exit Function

    If Lcase(NodeOBJ.nodeTypeString)="element" Then set fNode=NodeOBJ     Else set fANode=NodeOBJ     End If     getNodeText=NodeOBJ.text   End function '插入在BefelementOBJ下面一个名为ElementName,Value为ElementText的子节点。 'IsFirst:是否插在第一个位置;IsCDATA:说明节点的值是否属于CDATA类型 '插入成功就返回新插入这个节点 'BefelementOBJ可以是对象也可以是节点名,为null就取当前默认对象 Function InsertElement(byVal BefelementOBJ,byVal ElementName,byVal ElementText,byVal IsFirst,byVal IsCDATA)     Dim Element,TextSection,SpaceStr     Set InsertElement=Nothing     If not fopen Then Exit Function

    Set BefelementOBJ=ChildNode(XmlDom,BefelementOBJ,false)     If BefelementOBJ Is Nothing Then Exit Function     Set Element=XmlDom.CreateElement(Trim(ElementName)) 'SpaceStr=vbCrLf&TabStr(BefelementOBJ) 'Set STabStr=XmlDom.CreateTextNode(SpaceStr) 'If Len(SpaceStr)>2 Then  SpaceStr=Left(SpaceStr,Len(SpaceStr)-2) 'Set ETabStr=XmlDom.CreateTextNode(SpaceStr)     If IsFirst=true Then 'BefelementOBJ.InsertBefore ETabStr,BefelementOBJ.firstchild       BefelementOBJ.InsertBefore Element,BefelementOBJ.firstchild 'BefelementOBJ.InsertBefore STabStr,BefelementOBJ.firstchild     Else 'BefelementOBJ.appendChild STabStr       BefelementOBJ.appendChild Element 'BefelementOBJ.appendChild ETabStr     End If

    If IsCDATA=true Then set TextSection=XmlDom.createCDATASection(ElementText)       Element.appendChild TextSection     ElseIf ElementText<>"" Then       Element.Text=ElementText     End If

    Set InsertElement=Element     Set fNode=Element   End Function '在ElementOBJ节点上插入或修改名为AttributeName,值为:AttributeText的属性 '如果已经存在名为AttributeName的属性对象,就进行修改。 '返回插入或修改属性的Node 'ElementOBJ可以是Element对象或名,为null就取当前默认对象 Function setAttributeNode(byVal ElementOBJ,byVal AttributeName,byVal AttributeText)     Dim AttributeNode     Set setAttributeNode=nothing

    If not fopen Then Exit Function     Set ElementOBJ=ChildNode(XmlDom,ElementOBJ,false)     If ElementOBJ Is Nothing Then Exit Function     Set AttributeNode=ElementOBJ.attributes.getNamedItem(AttributeName)     If AttributeNode Is nothing Then        Set AttributeNode=XmlDom.CreateAttribute(AttributeName)        ElementOBJ.setAttributeNode AttributeNode     End If     AttributeNode.text=AttributeText set fNode=ElementOBJ set fANode=AttributeNode     Set setAttributeNode=AttributeNode   End Function '修改ElementOBJ节点的Text值,并返回这个节点 'ElementOBJ可以对象或对象名,为null就取当前默认对象 Function UpdateNodeText(byVal ElementOBJ,byVal NewElementText,byVal IsCDATA)     Dim TextSection

set UpdateNodeText=nothing     If not fopen Then Exit Function     Set ElementOBJ=ChildNode(XmlDom,ElementOBJ,false)     If ElementOBJ Is Nothing Then Exit Function

    If IsCDATA=true Then set TextSection=XmlDom.createCDATASection(NewElementText)       If ElementOBJ.firstchild Is Nothing Then         ElementOBJ.appendChild TextSection       ElseIf LCase(ElementOBJ.firstchild.nodeTypeString)="cdatasection" Then         ElementOBJ.replaceChild TextSection,ElementOBJ.firstchild       End If     Else       ElementOBJ.Text=NewElementText     End If set fNode=ElementOBJ     Set UpdateNodeText=ElementOBJ   End Function '返回符合testValue条件的第一个ElementNode,为null就取当前默认对象 Function getElementNode(byVal ElementName,byVal testValue)     Dim Element,regEx,baseName     Set getElementNode=nothing     If not fopen Then Exit Function

    testValue=Trim(testValue)     Set regEx=New RegExp     regEx.Pattern="^[A-Za-z]+"     regEx.IgnoreCase=true     If regEx.Test(testValue) Then testValue="/"&testValue     Set regEx=nothing     baseName=LCase(Right(ElementName,Len(ElementName)-InStrRev(ElementName,"/",-1)))

    Set Element=XmlDom.SelectSingleNode("//"&ElementName&testValue)

    If Element Is Nothing Then 'Response.write ElementName&testValue       Set getElementNode=nothing       Exit Function     End If

    Do While LCase(Element.baseName)<>baseName       Set Element=Element.selectSingleNode("..")       If Element Is Nothing Then Exit Do     Loop     If LCase(Element.baseName)<>baseName Then       Set getElementNode=nothing     Else       Set getElementNode=Element       If Lcase(Element.nodeTypeString)="element" Then         Set fNode=Element       Else         Set fANode=Element       End If     End If   End Function '删除一个子节点 Function removeChild(byVal ElementOBJ)     removeChild=false     If not fopen Then Exit Function

    Set ElementOBJ=ChildNode(null,ElementOBJ,false)     If ElementOBJ Is Nothing Then Exit Function 'response.write ElementOBJ.baseName

    If Lcase(ElementOBJ.nodeTypeString)="element" Then       If ElementOBJ Is fNode Then set fNode=Nothing       If ElementOBJ.parentNode Is Nothing Then         XmlDom.removeChild(ElementOBJ)       Else         ElementOBJ.parentNode.removeChild(ElementOBJ)       End If       removeChild=True     End If   End Function '清空一个节点所有子节点 Function ClearNode(byVal ElementOBJ) set ClearNode=Nothing      If not fopen Then Exit Function      Set ElementOBJ=ChildNode(null,ElementOBJ,false)      If ElementOBJ Is Nothing Then Exit Function      ElementOBJ.text=""      ElementOBJ.removeChild(ElementOBJ.firstchild)      Set ClearNode=ElementOBJ      Set fNode=ElementOBJ   End Function

'删除子节点的一个属性 Function removeAttributeNode(byVal ElementOBJ,byVal AttributeOBJ)     removeAttributeNode=false     If not fopen Then Exit Function     Set ElementOBJ=ChildNode(XmlDom,ElementOBJ,false)     If ElementOBJ Is Nothing Then Exit Function     Set AttributeOBJ=ChildNode(ElementOBJ,AttributeOBJ,true)     If not AttributeOBJ Is nothing Then       ElementOBJ.removeAttributeNode(AttributeOBJ)       removeAttributeNode=True     End If   End Function

'保存打开过的文件,只要保证FileName不为空就可以实现保存 Function Save()     On Error Resume Next     Save=false     If (not fopen) or (fFileName="") Then Exit Function     XmlDom.Save fFileName     Save=(not IsError)     If Err.number<>0 then       Err.clear       Save=false     End If   End Function

'另存为XML文件,只要保证FileName不为空就可以实现保存 Function SaveAs(SaveFileName)     On Error Resume Next     SaveAs=false     If (not fopen) or SaveFileName="" Then Exit Function     XmlDom.Save SaveFileName     SaveAs=(not IsError)     If Err.number<>0 then       Err.clear       SaveAs=false     End If   End Function

'检查并打印错误信息   Private Function IsError()     If XmlDom.ParseError.errorcode<>0 Then        fErrInfo="<h1>Error"&XmlDom.ParseError.errorcode&"</h1>"        fErrInfo=fErrInfo&"<B>Reason :</B>"&XmlDom.ParseError.reason&"<br>"        fErrInfo=fErrInfo&"<B>URL &nbsp; &nbsp;:</B>"&XmlDom.ParseError.url&"<br>"        fErrInfo=fErrInfo&"<B>Line &nbsp; :</B>"&XmlDom.ParseError.line&"<br>"        fErrInfo=fErrInfo&"<B>FilePos:</B>"&XmlDom.ParseError.filepos&"<br>"        fErrInfo=fErrInfo&"<B>srcText:</B>"&XmlDom.ParseError.srcText&"<br>"        IsError=True     Else       IsError=False     End If   End Function End Class %>

本文由来源 21aspnet,由 javajgs_com 整理编辑,其版权均为 21aspnet 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档