ASP XMLDom在服务器端操作XML文件的主要方法和实现

2018-09-06 13:01

阅读:370

  对于小数据量,xml文件在检索更新上于ACCESS有很多优势。

我曾经测试过不用数据库,把网站的会员信息,商品数据信息,交易信息,网站定制信息全部存放在三个xml文件中,运行结果十分正常,感觉上比数据库快多了,不过没有作测试,不能确定。

下面说一下创建,查询,修改等对xml操作的主要方法

程序代码

NO.1--建立一个XML数据库data.xml
复制代码 代码如下:
<?xml version=1.0?>
<records>
<record>
<name>caca</name>
<qq>154222225</qq>
</record>
<records>

NO.2--建立对象CreateObject
建立data.xml的对象先
set xmldoc=server.createobjcet(microsoft.xmldom)
xmldoc.load(server.mappath(data.xml)

NO.3--选定节点SelectNode
你想操作哪个Node,必须定位到这个节点是不是,先看看这个data.xml有几个Node??
用一个递归函数搞定:
复制代码 代码如下:
getnodes(xmldoc)

sub getnodes(node)
dim i
response.write(<br><b>NodeName:</b>&node.nodename&<br><b>NodeTypeString:</b>&node.nodetypestring&<br><b>NodeValue:</b>&node.nodevalue&<br><b>Text:</b>&node.text&<br><b>node.childnodes.length:</b>&node.childnodes.length&<p>)

if node.childnodes.length<>0 then
for i=0 to node.childnodes.length-1
getnodes(node.childnodes(i))
next
end if
end sub
用这个函数后,可以看到这个data.xml有10个Node
这些Node可以很简单的定位:
xmldoc
xmldoc.childnodes(0)
xmldoc.childnodes(1)
xmldoc.childnodes(1).childnodes(0)
xmldoc.childnodes(1).childnodes(0).childnodes(0)
xmldoc.childnodes(1).childnodes(0).childnodes(0).text
xmldoc.childnodes(1).childnodes(0).childnodes(1)
xmldoc.childnodes(1).childnodes(0).childnodes(1).text
xmldoc.childnodes(1).childnodes(0).childnodes(2)
xmldoc.childnodes(1).childnodes(0).childnodes(2).text
是不是定位很简单呀,还有个方法,比如定位<name>
xmldoc.selectsinglenode(//name)

NO.4--给节点赋值(修改节点的值)
学会了定位节点,利用其属性,就可以修改或者赋值了
例如,把<name>的值caca改为wawa
xmldoc.selectsinglenode(//name).text=wawa
xmldoc.save(server.mappath(data.xml))
搞定!
NO.5--创建新的节点CreatenewNode
用createelement或者createnode(,,)
例如:在record下新建个<age>,只需要一句就搞定:
xmldoc.selectsinglenode(//record).appendchild(xmldoc.createelement(<age>))
给<age>赋值
xmldoc.selectsinglenode(//age).text=20
xmldoc.save(server.mappath(data.xml))
搞定!
NO.6--删除一个节点DeleteNode
你必须明确你想删除的这个节点的父节点,以及这个节点的特征
例如:删除<qq>节点
xmldoc.selectsinglenode(//record).removechild(xmldoc.selectsinglenode(//qq))
例如:删除那个<name>=caca的<record>
xmldoc.selectsinglenode(//records).removechild(xmldoc.selectsinglenode(//record[name=caca]))
xmldoc.save(server.mappath(data.xml))
搞定!
只有能熟练这6条code,用asp控制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下的许多功能了。

------------------------------------------------------------------------------------------

虽然asp只能简单的操作XML文件,可是对于一般程序开发者来说就已经足够。
之前,XML语言非常的少接触,后来慢慢的,发觉XML在存储数据上有很多的方便。虽然安全性不好(个人认为),可是对于一般的数据存储的确 是一个非常不错的选择。
今天因为在一个网站上需要用到XML,我在这里就做一些总结(后期将会用到):
==============
首先,先整理ASP读取XML文件
default.asp的代码
<%
dim node,i,nodecount
set Doc = CreateObject(Microsoft.XMLDOM)
Doc.async = false
Doc.load(Server.MapPath(data.xml))
set root = Doc.documentElement
set nodeLis = root.childNodes
nodeCount = nodeLis.length
For i=1 to nodeCount
set node = nodeLis.nextNode()
set cost = node.attributes.getNamedItem(cost)
%>
第 <%=i%> 条记录:
<table width=50% border=1>
<tr>
<td width=43 rowspan=2><img src=<%=node.selectSingleNode(img).text%>/></td>
<td width=46>书名</td>
<td width=48>出版社</td>
<td width=42>价格</td>
</tr>
<tr>
<td>
<%=node.selectSingleNode(name).text%>
</td>
<td>
<%=node.selectSingleNode(publisher).text%>
</td>
<td>
<%= cost.text%>
</td>
</tr>
</table>
<%
Next
%>
====================
接下来就是Data.xml数据内容
<?xml version=1.0 encoding=UTF-8?>
<data>
<book cost=56>
<name>Dreamweaver</name>
<publisher>中国铁路出版社</publisher>
<img>img/dw.jpg</img>
</book>
<book cost=62>
<name>Flash</name>
<publisher>中国铁路出版社</publisher>
<img>img/flash.jpg</img>
</book>
<book cost=48>
<name>Firweorks</name>
<publisher>中国铁路出版社</publisher>
<img>img/fw.jpg</img>
</book>
</data>


评论


亲,登录后才可以留言!