ASP通过XMLDom在服务器端操作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下的许多功能了。
re:[转]ASP通过XMLDom在服务器端操作XML文件的主要方法和实现
xml既然可以看成是数据库,那它的第一步工作就当然是创建链接对象了。(以ASP+xml为例)
创建方法同链接数据库一样,用server.createobject为创建。
方法如下:
set xmlDoc= Server.CreateObject("microsoft.xmldom") xmlDoc.async=false xmldata=数据源绝对路径 xmlDoc.load xmldata '这里使用load方法进行链接
既于xml的数据格式是比较人性化的,可以由于人为或其它的原因,引起数据格式不合法,这时如果继续使用的话,会引起程序出程,这样,我们往往在创建好链接对象后进行数据格式验证。
方法如下:
if xmlDoc.parseError.errorCode<>0 then ….错误处理
<% '—————————————————————- '程序简介: 完成asp语言对XML文档中指定节点文本的增加、删除、修改、查看 '入口参数: 无 '出口参数: 无 '———————————————— '函数名字:ConnectXml() '入口参数: filename 需要连接或打开的xml文件名 '出口参数: 无 '返回值 :ConnectXml=0,XMLMorntekDocument就是一个成功装载XML文档的对象了。 ' ConnectXml<>0,则打印错误信息strError '———————————————— dim XMLMorntekDocument function ConnectXml(filename) dim strSourceFile strSourceFile = Server.MapPath(filename) Set XMLMorntekDocument = Server.CreateObject(”Microsoft.XMLDOM”) XMLMorntekDocument.async = false XMLMorntekDocument.load(strSourceFile) ConnectXml=XMLMorntekDocument.parseerror.errorcode if XMLMorntekDocument.parseerror.errorcode<>0 then strError=”<h2>error”&XMLMorntekDocument.parseerror.errorcode&”</h2>” strError=strError&XMLMorntekDocument.parseerror.reason&”<br>” strError=strError&XMLMorntekDocument.parseerror.url&”<br>” strError=strError&XMLMorntekDocument.parseerror.line&”<br>” strError=strError&XMLMorntekDocument.parseerror.filepos&”<br>” strError=strError&XMLMorntekDocument.parseerror.srcText&”<br>” response.write strError end if end function '———————————————— '函数名字:CloseXml() '入口参数: 无 '出口参数: 无 '———————————————— function CloseXml(XMLMorntekDocument) if IsObject(XMLMorntekDocument) then set XMLMorntekDocument=nothing end if end function '———————————————— '函数名字:SelectXmlNodeText(elementname) '入口参数: elementname 元素的名字 '出口参数: 无 '———————————————— function SelectXmlNodeText(elementname) elementname=”//”&elementname temp=XMLMorntekDocument.selectSingleNode(elementname).text selectXmlNodeText= server.htmlencode(temp) end function '———————————————— '函数名字:InsertXmlNodeText(befelementname,elementname,elementtext) '入口参数: elementname 插入的元素的名字 ' befelementname在此元素的名字前面插入元素 ' elementtext 插入的元素的文本 '出口参数: 无 '———————————————— function InsertXmlNodeText(befelementname,elementname,elementtext) dim befelement,element set befelement=XMLMorntekDocument.selectSingleNode(”//”&befelementname) set element= XMLMorntekDocument.createelement(elementname) befelement.insertBefore element,befelement.firstchild element.text=elementtext end function '———————————————— '函数名字:UpdateXmlNodeText(elementname,newelementtext) '入口参数: elementname 元素的名字 ' newelementtext元素的新文本 '出口参数: 无 '———————————————— function UpdateXmlNodeText(elementname,newelementtext) dim element set element=XMLMorntekDocument.selectSingleNode(”//”&elementname) element.text=newelementtext end function '———————————————— '函数名字:DeleteXmlNodeText(elementname) '入口参数: elementname 元素的名字 '出口参数: 无 '———————————————— function DeleteXmlNodeText(elementname) XMLMorntekDocument.selectSingleNode(”//”&elementname).text =”" end function %>