`
isiqi
  • 浏览: 16468934 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

XML操作类

阅读更多
<%
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
%>
分享到:
评论

相关推荐

    XML操作类XML操作类XML操作类

    XML操作类XML操作类XML操作类XML操作类XML操作类XML操作类XML操作类XML操作类

    c#xml操作类

    本篇文章将深入探讨如何在C#中进行XML操作,主要基于提供的"XML操作类"的压缩包文件。 首先,XML操作类通常包含了读取、写入、解析和修改XML文档的一系列方法。在C#中,我们可以利用System.Xml命名空间下的类来实现...

    简单实用的XML操作类

    本文将详细讲解一个简单的XML操作类,它提供了创建XML文档、添加节点、删除节点以及读取节点值的功能,这些都是XML处理中常见的操作。 首先,创建XML文档是XML操作的基础。在Java中,我们可以使用`...

    XML操作类(完整)

    XML操作类(完整)使用于C#领域,更好的操作XML文件

    c++的xml操作类

    tinyxml,很好用的xml操作类,c++版,删除了乱七八糟的工程文件,用时include一下两个头文件即可。具体使用方法参考:http://blog.csdn.net/zhangrentian/archive/2010/01/15/5194875.aspx

    Xml操作类(C#)

    Xml操作类,项目中使用的,包含读取数据、插入数据、修改数据、删除数据 附带使用方法。

    xml操作类,xml操作类

    xml的所有操作.xml的所有操作.xml的所有操作.xml的所有操作.

    c# 下xml操作类

    c#下操作xml文件类,方便调用操作。 xml操作日趋常见,xml格式相对规范,通过xml存储信息更加方法,采用该类可以方便操作。

    c#+库文件XML操作类时间操作类视频转换类文件操作类FTP操作类弹出信息类等库文件.zip

    1. **XML操作类**: XML(eXtensible Markup Language)是一种结构化数据存储格式,常用于数据交换和配置文件。C#中的System.Xml命名空间提供了处理XML文档的类,如XmlDocument、XmlNode、XmlElement等。这些类可以...

    XmlHelper操作类

    xml操作类,封装操作方法,可以直接调用直接对xml节点、元素进行增删改查操作

    XMLHelper xml操作类 c#

    c# XMLHelper xml操作类

    c# xml操作类

    c# xml 操作类c# xml 操作类c# xml 操作类c# xml 操作类

    XML操作类封装

    在C++项目中引入TinyXML库后,我们可以创建一个XML操作类,用于读写XML文档。 封装的基本思路是创建一个名为`XMLDocument`的类,包含以下功能: 1. **构造函数与析构函数**:构造函数可以初始化TinyXML库的`...

    提供xml操作类

    这个名为“XML操作类”的资源,显然提供了对XML进行操作的功能。C++是一种强大的系统级编程语言,虽然原生并不支持XML处理,但可以通过库和API来实现XML的读写和解析。这个资源可能是用C++编写的一组类或函数,用于...

    C++ xml 操作 类

    C++ xml 操作 类

    php xml操作类

    php写的一个 xml操作类 可以序列化和串行化 支持 array2xml和 xml2array

    XML操作类.zip

    这个"XML操作类.zip"文件提供了一些C#类,可能包含了用于处理XML的实用方法和功能。 首先,我们来看一下C#中处理XML的基本概念: 1. **XmlDocument**: .NET框架中的XmlDocument类是用于加载和操作XML文档的主要类。...

    XML_C#编写的xml操作类以及应用demo_DEMO_

    1. **XmlDocument**: 这是C#中最常用的XML操作类,它代表一个完整的XML文档。你可以通过Load方法加载XML文件,然后使用CreateElement、AppendChild等方法对XML进行修改,最后用Save方法将修改后的XML保存到文件。 2...

    markupclass VC XML操作类

    "markupclass VC XML操作类"是指一个基于Visual C++(VC)的类库,它提供了对XML文件进行读取和创建的功能。这个类库可能包含了若干个类,如XMLDocument、XMLElement等,用于封装XML文件的操作。例如,XMLDocument类...

    XMLOper xml操作类

    XMLOper xml操作类 xml文件操作类 xml读 写 删 改

Global site tag (gtag.js) - Google Analytics