分享
 
 
 

XML操作类

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

<%

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

%>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有