对于小数据量,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下的许多功能了。
该文章转自[雨哲工作室]:http://www.yz81.com/Article/ShowArticle.asp?ArticleID=2970
下面是asp对xml文件的操作类和实现文件:
<%
Const FilePath = "2.xml"
Dim Action:Action = Trim(Request("Action"))
Dim ID
Dim PlugName:PlugName = Trim(Request("PlugName"))
Dim PlugUrl:PlugUrl = Trim(Request("PlugUrl"))
Dim PlugAdminUrl:PlugAdminUrl = Trim(Request("PlugAdminUrl"))
Select Case Action
Case "Add"
Call Add
Case "SaveAdd"
Call SaveAdd
Case Else
Call Main
End Select
Sub Main()
set tt=new ASPXML
tt.Path=server.MapPath(FilePath)'第一步先选择文件路径
tt.Data="Data" '第二步选择数据库
tt.open '打开
tt.SelectTable("Plug") '选择表
'tt.SelectItem "PlugName","雨哲" '查询条件 如果读出所有 这里不要
'tt.delectTable() '删除这个表
'tt.SelectItem "ID","1" '这里是查询ID为1的记录
'tt.Xml_Item=tt.Xml_Count 'tt.Xml_Item 是第几条记录 tt.Xml_Count是记录总数
If tt.Xml_Bof or tt.Xml_Eof Then
Response.Write "尚无数据"
Response.End
End If
Response.Write "<table>"
Response.Write " <tr>"
Response.Write " </tr>"
do while not(tt.Xml_Bof or tt.Xml_Eof)
Response.Write " <tr>"
Response.Write " <td>" & tt.read("ID") & "</td>"
Response.Write " <td>" & tt.read("PlugName") & "</td>"
Response.Write " <td>" & tt.read("PlugUrl") & "</td>"
Response.Write " <td>" & tt.read("PlugAdminUrl") & "</td>"
Response.Write " </tr>"
tt.MoveNext()
loop
Response.Write "</table>"
tt.close '关闭
End Sub
Sub Add()
response.write "<form name='form1' method='post' action='?Action=SaveAdd'>"
response.write " 插件名称:<input type='text' name='PlugName' size='30' ><br>"
response.write " 插件地址:<input type='text' name='PlugUrl' size='40'><br>"
response.write " 管理地址:<input type='text' name='PlugAdminUrl' size='40'><br>"
response.write " <input type='submit' value='提交'> <input type='reset' value='重置'>"
response.write " </form>"
End Sub
Sub SaveAdd()
set tt=new ASPXML
tt.Path=server.MapPath(FilePath)'第一步先选择文件路径
tt.Data="Data" '第二步选择数据库
tt.open '打开
tt.SelectTable("Plug") '选择表
tt.addnew ' 添加记录
tt.add "PlugName",PlugName '写入值
tt.add "PlugUrl",PlugUrl '写入值
tt.add "PlugAdminUrl",PlugAdminUrl '写入值
tt.update '保存记录
tt.close '关闭
End Sub
Class ASPXML
Private objDom,objnodes,objTable,Xml_Array,XMLnodes,ID,brstr,NewXMLnode,NewXMLcooky
Public Path,Data,Xml_Eof,Xml_Bof,Xml_Item,Xml_Count
'打开文档
Public Sub Open()
set objDom=server.CreateObject("Microsoft.XMLDOM")
objDom.load Path
set objnodes=objdom.documentElement.SelectSingleNode("//"+Data+"").ChildNodes
set XMLnodes=objdom.documentElement.SelectSingleNode("//"+Data+"")
End Sub
'选择表
Public Function SelectTable(Table)
objTable=Table
Xml_Count=-1
Xml_Eof=false
Xml_Bof=false
'Xml_Item=2
If Xml_Item="" then
Xml_Item=0
End If
GETCount()
ChkCount()
End Function
Public Sub MoveNext() '下移一行
Xml_Item=Xml_Item+1
ChkCount()
End Sub
Public Sub MoveLast() '上移一行
Xml_Item=Xml_Item-1
ChkCount()
End Sub
Public Function Read(key) '读出值
Read=objnodes(int(Xml_Array(Xml_Item))).selectSingleNode(key).text
End Function
Public Function Write(key,viold) '写入
objnodes(int(Xml_Array(Xml_Item))).selectSingleNode(key).text=viold
End Function
Public Function SelectItem(key,viold) '查询字段
Xml_AllTableWords=""
For i=0 To Xml_Count
xml_viold=objnodes(int(Xml_Array(i))).selectSingleNode(key).text
If xml_viold=viold Then
Xml_AllTableWords=Xml_AllTableWords+"|"+Xml_Array(i)
End If
Next
StrPtr = instr(Xml_AllTableWords, "|")
Xml_AllTableWords = mid(Xml_AllTableWords, StrPtr+1)
Xml_Array=split(Xml_AllTableWords , "|")
Xml_Count=UBound(Xml_Array)
ChkCount()
End Function
Public Sub AddNew() '新加记录
NewXMLnode=""
If XMLnodes.hasChildNodes Then
ID = XMLnodes.lastchild.firstchild.text+1
Else
ID=1 '如是没有字子节点则是第一次ID号设为1
End If
Brstr=chr(13)&chr(10)&chr(9)
NewXMLcooky=Brstr&"<"&objTable&">"&Brstr &"<ID>"&ID&"</ID>"&Brstr
End Sub
Public Function Add(key,viold) '添加数值
NewXMLcooky=NewXMLcooky&"<"&key&">"&viold&"</"&key&">"&Brstr
NewXMLnode=NewXMLcooky&"</"&objTable&">"&chr(13)
End Function
Public Function delect(key,viold) '删除记录
for i=0 to Xml_Count
if ISkeyOk(key,viold) then
XMLnodes.removechild(objDom.selectsinglenode("//"&objTable&"["&key&"='"&viold&"']"))
end if
next
objDom.save(Path)
End Function
Public Function DelectTable() '删除表
for i=0 to Xml_Count
XMLnodes.removechild(objDom.selectsinglenode("//"&objTable))
next
objDom.save(Path)
End Function
Public Sub update() '更新修改表
if NewXMLnode<>"" then
set objXML2=Server.CreateObject("Microsoft.XMLDOM")
objXML2.loadXML(NewXMLnode) '建立一个新XML对像
set rootNewNode=objXML2.documentElement '把XML版片段读入内存中
XMLnodes.appendChild(rootNewNode) '获得objXML2的根节点
end if
objDom.Save(Path)
End Sub
Public Sub CLOSE() '关闭
set objnodes=nothing
set objDom=nothing
'Response.Write(objTable)
End Sub
Private Function GETCount()
Xml_AllTableWords=""
Xml_AllCount=-1
for each element in objnodes
Xml_AllCount=Xml_AllCount+1
If element.nodename =objTable then
Xml_AllTableWords=Xml_AllTableWords+"|"+cstr(Xml_AllCount)
end if
next
StrPtr = instr(Xml_AllTableWords, "|")
Xml_AllTableWords = mid(Xml_AllTableWords, StrPtr+1)
Xml_Array=split(Xml_AllTableWords , "|")
Xml_Count=UBound(Xml_Array)
End Function
Private Function ChkCount()
if Xml_Count<0 then
Xml_Bof=true
end if
if Xml_Item>Xml_Count then
Xml_Eof=true
end if
End Function
Private Function ISkeyOk(key,viold)
ISkeyOk=false
if not(XMLnodes.hasChildNodes) then
exit Function
end if
for each timent in objnodes
If timent.nodename =objTable then
set pobjnodes=timent.ChildNodes
for each yyment in pobjnodes
if yyment.nodename=key and yyment.text=viold then
ISkeyOk=true
exit Function
end if
next
end if
next
End Function
End Class
%>
Tags: ASP
原创文章如转载,请注明:转载自:飞扬部落编程仓库 : http://www.busfly.net/csdn/
本文链接地址:http://www.busfly.net/csdn/post/ASP-XML-function-class1.html
如果你喜欢本文,请顶一下,支持我,你的支持是我继续发好文章的最大动力。谢谢。
好东西需要分享,快把本文发给你的朋友吧~!~