微軟的ASP.Net跟XML緊密結合,不可分割,可見XML在日後程序設計中的重要性。
在ASP中,也能讓XML發揮其優點。例如像.Net那樣寫一個XML配置文件,在程序中讀取,或者將一些數據量不
大又經常訪問的數據寫入到XML中,經過轉換後生成Html。這樣的話能夠減少程序與數據庫的頻繁連接,提高網站的運行速度。
下面是從數據庫中讀取數據,並生成XML的一段代碼:
<%
response.ContentType = "text/XML"
set conn=Server.CreateObject("ADODB.Connection")
conn.provider="Microsoft.Jet.OLEDB.4.0;"
conn.open server.mappath("/db/database.mdb")
sql="select fname,lname from tblGuestBook"
set rs=Conn.Execute(sql)
rs.MoveFirst()
response.write("<?XML version='1.0' encoding='ISO-8859-1'?>")
response.write("<guestbook>")
while (not rs.EOF)
response.write("<guest>")
response.write("<fname>" & rs("fname") & "</fname>")
response.write("<lname>" & rs("lname") & "</lname>")
response.write("</guest>")
rs.MoveNext()
wend
rs.close()
conn.close()
response.write("</guestbook>")
%>
下面是作者搜集和整理後的一些讀取XML文件的公用函數:
<%
'解析一個XML文件的公用函數集合
dim document
'裝載一個XML文檔,函數名Loaddocument(文件名)
function LoadDocument(filename)
XMLfile=server.Mappath(filename)
Set document = Server.CreateObject("Microsoft.XMLDOM")
document.async = false
document.load(XMLfile)
end function
'查詢一個節點裡的文本內容,函數名SelectXMLNodeText(節點名稱)
function SelectXMLNodeText(elementname)
elementname="//"&elementname
temp=document.selectSingleNode(elementname).text
selectXMLNodeText= server.Htmlencode(temp)
end function
'根據屬性名查找一個節點的屬性值,函數名FindAtrributeValue(節點名稱,屬性名稱)
function FindAtrributeValue(elementname,atrributename)
elementname="//"&elementname
atrributename=atrributename
set NodeObj=document.selectSingleNode(elementname)
FindAtrributeValue=NodeObj.GetAttributeNode(atrributename).Nodevalue
end function
'取得某個節點的子節點的個數,函數名GetNodesNumber(節點名稱)
function GetNodesNumber(elementname)
elementname="//"&elementname
set objnodes=document.SelectSingleNode(elementname).ChildNodes
GetNodesNumber=objnodes.length
'set objnodes=nothing
end function
'以一個OBJ的形式返回一個節點的第I個子節點,函數名GetObjChildNode(根節點名稱,參數I)
function GetObjChildNodes(elementname,i)
elementname="//"&elementname
set objnodes=document.SelectSingleNode(elementname)
if objnodes.ChildNodes.length<i then
response.Write("參數越界")
else
set GetObjChildNodes=objnodes.childNodes(i-1)
end if
end function
'函數入口為一個節點對象,出口是在入口節點對象的基礎做為根節點,返回的第i個子節點對象(OBJ)
function GetObjChildNode(obj,i)
if IsObject(obj) then
if obj.ChildNodes.length>0 then
set GetObjChildNode=obj.ChildNodes(i)
end if
end if
end function
'如果一個節點對象(OBJ)有孩子節點,該函數返回其孩子個數,即記錄集長度
function GetObjChildNodesNumber(obj)
if obj.ChildNodes.length>0 then
GetObjChildNodesNumber=obj.ChildNodes.length
else
GetObjChildNodesNumber=0
end if
end function
'獲取一個節點對象(OBJ)的屬性值,函數入口為屬性名
function GetObjAtrValue(obj,atrributename)
GetObjAtrValue=obj.GetAttributeNode(atrributename).Nodevalue
end function
'獲取一個節點對象(OBJ)的屬性值,函數入口為obj名稱
function GetObjText(obj)
GetObjText=obj.text
end function
'遍歷一個節點所有的子節點
function OverVIEwNodes(elementname)
end function
'獲取一個節點屬性的名稱
function GetNodeAtrributeName()
end function
'獲取一個子節點的名稱
function GetChildNodeName()
end function
'Loaddocument("GetHotelDetailsResponse.XML")
'response.Write(FindAtrributeValue("Image","path")&"<br>")
'response.Write(GetNodesNumber("RoomType")&"<br>")
'response.Write(GetObjChildNodes("RoomType",2).nodename&"<br>")
%>