在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>")
%>