復(fù)制代碼 代碼如下:
Class XMLClass
Private objXml
Private xmlDoc
Private xmlPath
'//============================================================
'
Sub Class_initialize
Set objXml = Server.CreateObject("MSXML2.DOMDocument")
objXml.preserveWhiteSpace = true
objXml.async = false
End Sub
Sub Class_Terminate
Set objXml = Nothing
End Sub
'//============================================================
'
Public Function CreateNew(sName)
Set tmpNode = objXml.createElement(sName)
objXml.appendChild(tmpNode)
Set CreateNew = tmpNode
End Function
'
Public Function OpenXml(sPath)
OpenXml=False
sPath=Server.MapPath(sPath)
'Response.Write(sPath)
xmlPath = sPath
If objXml.load(sPath) Then
Set xmlDoc = objXml.documentElement
OpenXml=True
End If
End Function
'
Public Sub LoadXml(sStr)
objXml.loadXML(sStr)
Set xmlDoc = objXml.documentElement
End Sub
Public Sub InceptXml(xObj)
Set objXml = xObj
Set xmlDoc = xObj.documentElement
End Sub
'//============================================================
'
Public Function AddNode(sNode,rNode)
' sNode STRING 節(jié)點(diǎn)名稱
' rNode OBJECT 增加節(jié)點(diǎn)的上級(jí)節(jié)點(diǎn)引用
'=============================================================
Dim TmpNode
Set TmpNode = objXml.createElement(sNode)
rNode.appendChild TmpNode
Set AddNode = TmpNode
End Function
'
Public Function AddAttribute(sName,sValue,oNode)
' sName STRING 屬性名稱
' sValue STRING 屬性值
' oNode OBJECT 增加屬性的對(duì)象
'=============================================================
oNode.setAttribute sName,sValue
End Function
'
Public Function AddText(FStr,cdBool,oNode)
Dim tmpText
If cdBool Then
Set tmpText = objXml.createCDataSection(FStr)
Else
Set tmpText = objXml.createTextNode(FStr)
End If
oNode.appendChild tmpText
End Function
'========================================================================================================
'
Public Function GetAtt(aName,oNode)
' aName STRING 屬性名稱
' oNode OBJECT 節(jié)點(diǎn)引用
'=============================================================
dim tmpValue
tmpValue = oNode.getAttribute(aName)
GetAtt = tmpValue
End Function
'
Public Function GetNodeName(oNode)
' oNode OBJECT 節(jié)點(diǎn)引用
GetNodeName = oNode.nodeName
End Function
'
Public Function GetNodeText(oNode)
' oNode OBJECT 節(jié)點(diǎn)引用
GetNodeText = oNode.childNodes(0).nodeValue
End Function
'
Public Function GetNodeType(oNode)
' oNode OBJECT 節(jié)點(diǎn)引用
GetNodeType = oNode.nodeValue
End Function
'
Public Function FindNodes(sNode)
Dim tmpNodes
Set tmpNodes = objXml.getElementsByTagName(sNode)
Set FindNodes = tmpNodes
End Function
'
Public Function FindNode(sNode)
Dim TmpNode
Set TmpNode=objXml.selectSingleNode(sNode)
Set FindNode = TmpNode
End Function
'
Public Function DelNode(sNode)
Dim TmpNodes,Nodesss
Set TmpNodes=objXml.selectSingleNode(sNode)
Set Nodesss=TmpNodes.parentNode
Nodesss.removeChild(TmpNodes)
End Function
'
Public Function ReplaceNode(sNode,sText,cdBool)
'replaceChild
Dim TmpNodes,tmpText
Set TmpNodes=objXml.selectSingleNode(sNode)
'AddText sText,cdBool,TmpNodes
If cdBool Then
Set tmpText = objXml.createCDataSection(sText)
Else
Set tmpText = objXml.createTextNode(sText)
End If
TmpNodes.replaceChild tmpText,TmpNodes.firstChild
End Function
Private Function ProcessingInstruction
'//--創(chuàng)建XML聲明
Dim objPi
Set objPi = objXML.createProcessingInstruction("xml", "version="chr(34)"1.0"chr(34)" encoding="chr(34)"gb2312"chr(34))
'//--把xml生命追加到xml文檔
objXML.insertBefore objPi, objXML.childNodes(0)
End Function
'//=============================================================================
'
Public Function SaveXML()
'ProcessingInstruction()
objXml.save(xmlPath)
End Function
'
Public Function SaveAsXML(sPath)
ProcessingInstruction()
objXml.save(sPath)
End Function
'//==================================================================================
'相關(guān)統(tǒng)計(jì)
'
Property Get Root
Set Root = xmlDoc
End Property
'
Property Get Length
Length = xmlDoc.childNodes.length
End Property
'//==================================================================================
'相關(guān)測(cè)試
Property Get TestNode
TestNode = xmlDoc.childNodes(0).text
End Property
End Class
ASP通過(guò)XMLDom在服務(wù)器端操作XML文件的主要方法和實(shí)現(xiàn)
對(duì)于小數(shù)據(jù)量,xml文件在檢索更新上于ACCESS有很多優(yōu)勢(shì)。
我曾經(jīng)測(cè)試過(guò)不用數(shù)據(jù)庫(kù),把網(wǎng)站的會(huì)員信息,商品數(shù)據(jù)信息,交易信息,網(wǎng)站定制信息全部存放在三個(gè)xml文件中,運(yùn)行結(jié)果十分正常,感覺(jué)上比數(shù)據(jù)庫(kù)快多了,不過(guò)沒(méi)有作測(cè)試,不能確定。
下面說(shuō)一下創(chuàng)建,查詢,修改等對(duì)xml操作的主要方法
‘創(chuàng)建DOM對(duì)象
set objDom=server.CreateObject(”MicroSoft.XMLDom”)
‘取得xml數(shù)據(jù)
‘方法1 取得xml文件的xml數(shù)據(jù)
objDom.load(”c:\test.xml”)
‘方法2 取得xml數(shù)據(jù)串的數(shù)據(jù)
objDom.loadxml(”people>man name=”sd”/>/people>”)
‘創(chuàng)建一個(gè)節(jié)點(diǎn)對(duì)象
Set Newnode=objDom.CreateElement(”people”)
‘給這個(gè)節(jié)點(diǎn)赴值
Newnode.Text=”人”
‘ 給這個(gè)節(jié)點(diǎn)添加屬性
Set NewAttribute=objDom.CreateNode(”attribute”,”name”,”")
NewAttribute.Text= ”張三”
Newnode.SetAttributeNode NewAttribute
‘給這個(gè)節(jié)點(diǎn)添加子節(jié)點(diǎn)
Set NewnodeChild=objDom.CreateElement(”address”)
Newnode.appendChild NewnodeChild
‘保存這個(gè)節(jié)點(diǎn)對(duì)象
objDom.appendChild Newnode
objDom.save(”c:\test.xml”)
‘查找一個(gè)節(jié)點(diǎn)對(duì)象
set objtofind=objdom.documentElement.SelectSingleNode(”//people/man”)
‘取出這個(gè)節(jié)點(diǎn)對(duì)象的 節(jié)點(diǎn)名,節(jié)點(diǎn)值,某個(gè)屬性值,和全部的xml
nodename=objtofind.nodename
nodevalue=objtofind.text
objtofind.GetAttributeNode(”name”).Nodevalue '屬性名為name的屬性值
‘取出一個(gè)屬性節(jié)點(diǎn)對(duì)象
set objattrtofind=objdom.documentElement.SelectSingleNode(”//people/man”). GetAttributeNode(”name”)
‘取出這個(gè)節(jié)點(diǎn)的屬性名,屬性值
nodeattrname=objattrtofind.nodename
nodeattrvalue=objattrtofind.nodevalue
‘刪除一個(gè)節(jié)點(diǎn)對(duì)象
set objnode=objdom.documentElement.SelectSingleNode(”//people/man”) '要?jiǎng)h除的節(jié)點(diǎn)
set objparentnode=objdom.documentElement.SelectSingleNode(”//people”) '要?jiǎng)h除的節(jié)點(diǎn)的父節(jié)點(diǎn)
objparentnode.removeChild objnode
‘取出一個(gè)節(jié)點(diǎn)的字節(jié)點(diǎn)集合
set objnodes=objdom.documentElement.SelectSingleNode(”//people/man”).ChildNodes
遍歷這個(gè)集合
方法1
for each element in objnodes
response.write element.nodename 字節(jié)點(diǎn)名
response.write element.text 字節(jié)點(diǎn)值
next
方法2
domlength=objnodes.length
for i = 0 to domlength-1
response.write objnodes.childnodes(i).nodename 字節(jié)點(diǎn)名
response.write objnodes.childnodes(i).text 字節(jié)點(diǎn)值
next
‘取出一個(gè)節(jié)點(diǎn)的屬性集合
set objnodes=objdom.documentElement.SelectSingleNode(”//people/man”).GetAttributeNode(”name”).attributes
遍歷這個(gè)集合
for each element in objnodes
response.write element.nodename 屬性名
response.write element.nodevalue 屬性值
next
等能夠熟練的運(yùn)用xmldom對(duì)象來(lái)操作xml文件了,就可以享
受xmlhttp對(duì)象來(lái)實(shí)現(xiàn)asp下的許多功能了。
re:[轉(zhuǎn)]ASP通過(guò)XMLDom在服務(wù)器端操作XML文件的主要方法和實(shí)現(xiàn)
飛飛,你怎么不介紹一下@的用法,沒(méi)了這個(gè),很多事不方便。
xml,有人也稱之為數(shù)據(jù)壓縮技術(shù),顧名思義,xml是可以充當(dāng)數(shù)據(jù)庫(kù)來(lái)用。
所以,我們可以把xml看成是“小型的數(shù)據(jù)庫(kù)”。為什么說(shuō)是小型呢?因?yàn)閤ml本身的功能及應(yīng)用方便,與數(shù)據(jù)庫(kù)還是存在著一定的差別。那我們?yōu)槭裁匆褂脁ml呢?因?yàn)?,有時(shí)候我們的一些應(yīng)用程序雖然進(jìn)行數(shù)據(jù)存取,但是,如果使用數(shù)據(jù)庫(kù)的話,顯行有些不夠靈活,方便。這個(gè)時(shí)候,我們就應(yīng)該結(jié)合x(chóng)ml來(lái)使用。
xml既然可以看成是數(shù)據(jù)庫(kù),那它的第一步工作就當(dāng)然是創(chuàng)建鏈接對(duì)象了。(以ASP+xml為例)
創(chuàng)建方法同鏈接數(shù)據(jù)庫(kù)一樣,用server.createobject為創(chuàng)建。
方法如下:
set xmlDoc= Server.CreateObject(”microsoft.xmldom”)
xmlDoc.async=false
xmldata=數(shù)據(jù)源絕對(duì)路徑
xmlDoc.load xmldata '這里使用load方法進(jìn)行鏈接
既于xml的數(shù)據(jù)格式是比較人性化的,可以由于人為或其它的原因,引起數(shù)據(jù)格式不合法,這時(shí)如果繼續(xù)使用的話,會(huì)引起程序出程,這樣,我們往往在創(chuàng)建好鏈接對(duì)象后進(jìn)行數(shù)據(jù)格式驗(yàn)證。
方法如下:
if xmlDoc.parseError.errorCode>0 then
….錯(cuò)誤處理
%
‘—————————————————————-
‘程序簡(jiǎn)介: 完成asp語(yǔ)言對(duì)XML文檔中指定節(jié)點(diǎn)文本的增加、刪除、修改、查看
‘入口參數(shù): 無(wú)
‘出口參數(shù): 無(wú)
‘————————————————
‘函數(shù)名字:ConnectXml()
‘入口參數(shù): filename 需要連接或打開(kāi)的xml文件名
‘出口參數(shù): 無(wú)
‘返回值 :ConnectXml=0,XMLMorntekDocument就是一個(gè)成功裝載XML文檔的對(duì)象了。
‘ ConnectXml>0,則打印錯(cuò)誤信息strError
‘————————————————
dim XMLMorntekDocument
function ConnectXml(filename)
dim strSourceFile
strSourceFile = Server.MapPath(filename)
Set XMLMorntekDocument = Server.CreateObject(”Microsoft.XMLDOM”)
XMLMorntekDocument.async = false
XMLMorntekDocument.load(strSourceFile)
ConnectXml=XMLMorntekDocument.parseerror.errorcode
if XMLMorntekDocument.parseerror.errorcode>0 then
strError=”h2>error”XMLMorntekDocument.parseerror.errorcode”/h2>”
strError=strErrorXMLMorntekDocument.parseerror.reason”br>”
strError=strErrorXMLMorntekDocument.parseerror.url”br>”
strError=strErrorXMLMorntekDocument.parseerror.line”br>”
strError=strErrorXMLMorntekDocument.parseerror.filepos”br>”
strError=strErrorXMLMorntekDocument.parseerror.srcText”br>”
response.write strError
end if
end function
‘————————————————
‘函數(shù)名字:CloseXml()
‘入口參數(shù): 無(wú)
‘出口參數(shù): 無(wú)
‘————————————————
function CloseXml(XMLMorntekDocument)
if IsObject(XMLMorntekDocument) then
set XMLMorntekDocument=nothing
end if
end function
‘————————————————
‘函數(shù)名字:SelectXmlNodeText(elementname)
‘入口參數(shù): elementname 元素的名字
‘出口參數(shù): 無(wú)
‘————————————————
function SelectXmlNodeText(elementname)
elementname=”//”elementname
temp=XMLMorntekDocument.selectSingleNode(elementname).text
selectXmlNodeText= server.htmlencode(temp)
end function
‘————————————————
‘函數(shù)名字:InsertXmlNodeText(befelementname,elementname,elementtext)
‘入口參數(shù): elementname 插入的元素的名字
‘ befelementname在此元素的名字前面插入元素
‘ elementtext 插入的元素的文本
‘出口參數(shù): 無(wú)
‘————————————————
function InsertXmlNodeText(befelementname,elementname,elementtext)
dim befelement,element
set befelement=XMLMorntekDocument.selectSingleNode(”//”befelementname)
set element= XMLMorntekDocument.createelement(elementname)
befelement.insertBefore element,befelement.firstchild
element.text=elementtext
end function
‘————————————————
‘函數(shù)名字:UpdateXmlNodeText(elementname,newelementtext)
‘入口參數(shù): elementname 元素的名字
‘ newelementtext元素的新文本
‘出口參數(shù): 無(wú)
‘————————————————
function UpdateXmlNodeText(elementname,newelementtext)
dim element
set element=XMLMorntekDocument.selectSingleNode(”//”elementname)
element.text=newelementtext
end function
‘————————————————
‘函數(shù)名字:DeleteXmlNodeText(elementname)
‘入口參數(shù): elementname 元素的名字
‘出口參數(shù): 無(wú)
‘————————————————
function DeleteXmlNodeText(elementname)
XMLMorntekDocument.selectSingleNode(”//”elementname).text =”"
end function
%>
____________________
本文未經(jīng)測(cè)試,文章可行度未知。
您可能感興趣的文章:- asp下將數(shù)據(jù)庫(kù)中的信息存儲(chǔ)至XML文件中
- asp access數(shù)據(jù)庫(kù)并生成XML文件范例
- Javascript+XMLHttpRequest+asp.net無(wú)刷新讀取數(shù)據(jù)庫(kù)數(shù)據(jù)
- ASP讀取XML實(shí)例 優(yōu)酷專輯采集程序 雷鋒版
- ASP XMLDom在服務(wù)器端操作XML文件的主要方法和實(shí)現(xiàn)
- Asp操作Xml的精煉類,含示例代碼
- ASP.NET+XML打造網(wǎng)絡(luò)硬盤原理分析
- asp xmlhttp下載一句話
- asp.net TreeView與XML三步生成列表樹(shù)
- Asp 解析 XML并分頁(yè)顯示源碼
- ASP.NET中XML轉(zhuǎn)JSON的方法實(shí)例
- ASP.net處理XML數(shù)據(jù)實(shí)例淺析
- ASP.NET XmlDocument類詳解
- asp.net中XML如何做增刪改查操作
- asp控制xml數(shù)據(jù)庫(kù)的經(jīng)典代碼