« ASP操作XML数据-只有能熟练这6条code,用asp控制xml数据库,也就差不多了« »mysql命令行的基本用法(通用linux和windows) »
ASP操作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下的许多功能了。

该文章转自[雨哲工作室]: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

如果你喜欢本文,请顶一下,支持我,你的支持是我继续发好文章的最大动力。谢谢。
好东西需要分享,快把本文发给你的朋友吧~!~

     
相关文章:




◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
Feed订阅集
网站分类
勤劳致富^.^
最近发表
最新评论及回复
最近留言
随机推荐文章
Powered By Z-Blog   STYLE by busfly . FatMouse
Copyright © 2007 巴士飞扬技术博客. . 沪ICP备07027972号. 会员群1(VS为主):3769186.