ASP XML操作類代碼

來源:互聯網
上載者:User

複製代碼 代碼如下: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 節點名稱
' rNode OBJECT 增加節點的上級節點引用
'=============================================================
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 增加屬性的對象
'=============================================================
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 節點引用
'=============================================================
dim tmpValue
tmpValue = oNode.getAttribute(aName)
GetAtt = tmpValue
End Function
'
Public Function GetNodeName(oNode)
' oNode OBJECT 節點引用
GetNodeName = oNode.nodeName
End Function
'
Public Function GetNodeText(oNode)
' oNode OBJECT 節點引用
GetNodeText = oNode.childNodes(0).nodeValue
End Function
'
Public Function GetNodeType(oNode)
' oNode OBJECT 節點引用
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
'//--建立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
'//==================================================================================
'相關統計
'
Property Get Root
Set Root = xmlDoc
End Property
'
Property Get Length
Length = xmlDoc.childNodes.length
End Property
'//==================================================================================
'相關測試
Property Get TestNode
TestNode = xmlDoc.childNodes(0).text
End Property
End Class

ASP通過XMLDom在伺服器端操作XML檔案的主要方法和實現
對於小資料量,xml檔案在檢索更新上於ACCESS有很多優勢。

我曾經測試過不用資料庫,把網站的會員資訊,商品資料資訊,交易資訊,網站定製資訊全部存放在三個xml檔案中,運行結果十分正常,感覺上比資料庫快多了,不過沒有作測試,不能確定。

下面說一下建立,查詢,修改等對xml操作的主要方法

‘建立DOM對象
set objDom=server.CreateObject(”MicroSoft.XMLDom”)

‘取得xml資料
‘方法1 取得xml檔案的xml資料
objDom.load(”c:\test.xml”)
‘方法2 取得xml資料串的資料
objDom.loadxml(”<people><man name=”sd”/></people>”)

‘建立一個節點對象
Set Newnode=objDom.CreateElement(”people”)
‘給這個節點赴值
Newnode.Text=”人”
‘ 給這個節點添加屬性
Set NewAttribute=objDom.CreateNode(”attribute”,”name”,”")
NewAttribute.Text= ”張三”
Newnode.SetAttributeNode NewAttribute
‘給這個節點添加子節點
Set NewnodeChild=objDom.CreateElement(”address”)
Newnode.appendChild NewnodeChild
‘儲存這個節點對象
objDom.appendChild Newnode
objDom.save(”c:\test.xml”)

‘尋找一個節點對象
set objtofind=objdom.documentElement.SelectSingleNode(”//people/man”)
‘取出這個節點對象的 節點名,節點值,某個屬性值,和全部的xml
nodename=objtofind.nodename
nodevalue=objtofind.text
objtofind.GetAttributeNode(”name”).Nodevalue '屬性名稱為name的屬性值

‘取出一個屬性節點對象
set objattrtofind=objdom.documentElement.SelectSingleNode(”//people/man”). GetAttributeNode(”name”)
‘取出這個節點的屬性名稱,屬性值
nodeattrname=objattrtofind.nodename
nodeattrvalue=objattrtofind.nodevalue

‘刪除一個節點對象
set objnode=objdom.documentElement.SelectSingleNode(”//people/man”) '要刪除的節點
set objparentnode=objdom.documentElement.SelectSingleNode(”//people”) '要刪除的節點的父節點
objparentnode.removeChild objnode

‘取出一個節點的位元組點集合
set objnodes=objdom.documentElement.SelectSingleNode(”//people/man”).ChildNodes
遍曆這個集合
方法1
for each element in objnodes
response.write element.nodename 位元組點名
response.write element.text 位元組點值
next
方法2
domlength=objnodes.length
for i = 0 to domlength-1
response.write objnodes.childnodes(i).nodename 位元組點名
response.write objnodes.childnodes(i).text 位元組點值
next

‘取出一個節點的屬性集合
set objnodes=objdom.documentElement.SelectSingleNode(”//people/man”).GetAttributeNode(”name”).attributes
遍曆這個集合
for each element in objnodes
response.write element.nodename 屬性名稱
response.write element.nodevalue 屬性值
next

等能夠熟練的運用xmldom對象來操作xml檔案了,就可以享
受xmlhttp對象來實現asp下的許多功能了。

re:[轉]ASP通過XMLDom在伺服器端操作XML檔案的主要方法和實現
飛飛,你怎麼不介紹一下@的用法,沒了這個,很多事不方便。
xml,有人也稱之為資料壓縮技術,顧名思義,xml是可以充當資料庫來用。
所以,我們可以把xml看成是“小型的資料庫”。為什麼說是小型呢?因為xml本身的功能及應用方便,與資料庫還是存在著一定的差別。那我們為什麼要使用xml呢?因為,有時候我們的一些應用程式雖然進行資料存取,但是,如果使用資料庫的話,顯行有些不夠靈活,方便。這個時候,我們就應該結合xml來使用。
xml既然可以看成是資料庫,那它的第一步工作就當然是建立連結化物件了。(以ASP+xml為例)
建立方法同連結資料庫一樣,用server.createobject為建立。
方法如下:
set xmlDoc= Server.CreateObject(”microsoft.xmldom”)
xmlDoc.async=false
xmldata=資料來源絕對路徑
xmlDoc.load xmldata '這裡使用load方法進行連結

既於xml的資料格式是比較人性化的,可以由於人為或其它的原因,引起資料格式不合法,這時如果繼續使用的話,會引起程式出程,這樣,我們往往在建立好連結化物件後進行資料格式驗證。
方法如下:
if xmlDoc.parseError.errorCode<>0 then
….錯誤處理

<%
‘—————————————————————-
‘程式簡介: 完成asp語言對XML文檔中指定節點文本的增加、刪除、修改、查看
‘入口參數: 無
‘出口參數: 無
‘————————————————
‘函數名字:ConnectXml()
‘入口參數: filename 需要串連或開啟的xml檔案名稱
‘出口參數: 無
‘傳回值 :ConnectXml=0,XMLMorntekDocument就是一個成功裝載XML文檔的對象了。
‘ ConnectXml<>0,則列印錯誤資訊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=strError&XMLMorntekDocument.parseerror.reason&”<br>”
strError=strError&XMLMorntekDocument.parseerror.url&”<br>”
strError=strError&XMLMorntekDocument.parseerror.line&”<br>”
strError=strError&XMLMorntekDocument.parseerror.filepos&”<br>”
strError=strError&XMLMorntekDocument.parseerror.srcText&”<br>”
response.write strError
end if
end function

‘————————————————
‘函數名字:CloseXml()
‘入口參數: 無
‘出口參數: 無
‘————————————————
function CloseXml(XMLMorntekDocument)
if IsObject(XMLMorntekDocument) then
set XMLMorntekDocument=nothing
end if
end function

‘————————————————
‘函數名字:SelectXmlNodeText(elementname)
‘入口參數: elementname 元素的名字
‘出口參數: 無
‘————————————————
function SelectXmlNodeText(elementname)
elementname=”//”&elementname
temp=XMLMorntekDocument.selectSingleNode(elementname).text
selectXmlNodeText= server.htmlencode(temp)

end function

‘————————————————
‘函數名字:InsertXmlNodeText(befelementname,elementname,elementtext)
‘入口參數: elementname 插入的元素的名字
‘ befelementname在此元素的名字前面插入元素
‘ elementtext 插入的元素的文本
‘出口參數: 無
‘————————————————
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

‘————————————————
‘函數名字:UpdateXmlNodeText(elementname,newelementtext)
‘入口參數: elementname 元素的名字
‘ newelementtext元素的新文本
‘出口參數: 無
‘————————————————
function UpdateXmlNodeText(elementname,newelementtext)
dim element
set element=XMLMorntekDocument.selectSingleNode(”//”&elementname)
element.text=newelementtext
end function

‘————————————————
‘函數名字:DeleteXmlNodeText(elementname)
‘入口參數: elementname 元素的名字
‘出口參數: 無
‘————————————————
function DeleteXmlNodeText(elementname)
XMLMorntekDocument.selectSingleNode(”//”&elementname).text =”"
end function
%>
____________________

本文未經測試,文章可行度未知。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.