ASP XML操作类代码
程序员文章站
2022-06-24 16:21:59
复制代码 代码如下:class xmlclass private objxml private xmldoc private xmlpath '//============...
复制代码 代码如下:
class xmlclass
private objxml
private xmldoc
private xmlpath
'//============================================================
'
sub class_initialize
set objxml = server.createobject("msxml2.domdocument")
objxml.preservewhitespace = true
objxml.async = false
end sub
sub class_terminate
set objxml = nothing
end sub
'//============================================================
'
public function createnew(sname)
set tmpnode = objxml.createelement(sname)
objxml.appendchild(tmpnode)
set createnew = tmpnode
end function
'
public function openxml(spath)
openxml=false
spath=server.mappath(spath)
'response.write(spath)
xmlpath = spath
if objxml.load(spath) then
set xmldoc = objxml.documentelement
openxml=true
end if
end function
'
public sub loadxml(sstr)
objxml.loadxml(sstr)
set xmldoc = objxml.documentelement
end sub
public sub inceptxml(xobj)
set objxml = xobj
set xmldoc = xobj.documentelement
end sub
'//============================================================
'
public function addnode(snode,rnode)
' snode string 节点名称
' rnode object 增加节点的上级节点引用
'=============================================================
dim tmpnode
set tmpnode = objxml.createelement(snode)
rnode.appendchild tmpnode
set addnode = tmpnode
end function
'
public function addattribute(sname,svalue,onode)
' sname string 属性名称
' svalue string 属性值
' onode object 增加属性的对象
'=============================================================
onode.setattribute sname,svalue
end function
'
public function addtext(fstr,cdbool,onode)
dim tmptext
if cdbool then
set tmptext = objxml.createcdatasection(fstr)
else
set tmptext = objxml.createtextnode(fstr)
end if
onode.appendchild tmptext
end function
'========================================================================================================
'
public function getatt(aname,onode)
' aname string 属性名称
' onode object 节点引用
'=============================================================
dim tmpvalue
tmpvalue = onode.getattribute(aname)
getatt = tmpvalue
end function
'
public function getnodename(onode)
' onode object 节点引用
getnodename = onode.nodename
end function
'
public function getnodetext(onode)
' onode object 节点引用
getnodetext = onode.childnodes(0).nodevalue
end function
'
public function getnodetype(onode)
' onode object 节点引用
getnodetype = onode.nodevalue
end function
'
public function findnodes(snode)
dim tmpnodes
set tmpnodes = objxml.getelementsbytagname(snode)
set findnodes = tmpnodes
end function
'
public function findnode(snode)
dim tmpnode
set tmpnode=objxml.selectsinglenode(snode)
set findnode = tmpnode
end function
'
public function delnode(snode)
dim tmpnodes,nodesss
set tmpnodes=objxml.selectsinglenode(snode)
set nodesss=tmpnodes.parentnode
nodesss.removechild(tmpnodes)
end function
'
public function replacenode(snode,stext,cdbool)
'replacechild
dim tmpnodes,tmptext
set tmpnodes=objxml.selectsinglenode(snode)
'addtext stext,cdbool,tmpnodes
if cdbool then
set tmptext = objxml.createcdatasection(stext)
else
set tmptext = objxml.createtextnode(stext)
end if
tmpnodes.replacechild tmptext,tmpnodes.firstchild
end function
private function processinginstruction
'//--创建xml声明
dim objpi
set objpi = objxml.createprocessinginstruction("xml", "version="&chr(34)&"1.0"&chr(34)&" encoding="&chr(34)&"gb2312"&chr(34))
'//--把xml生命追加到xml文档
objxml.insertbefore objpi, objxml.childnodes(0)
end function
'//=============================================================================
'
public function savexml()
'processinginstruction()
objxml.save(xmlpath)
end function
'
public function saveasxml(spath)
processinginstruction()
objxml.save(spath)
end function
'//==================================================================================
'相关统计
'
property get root
set root = xmldoc
end property
'
property get length
length = xmldoc.childnodes.length
end property
'//==================================================================================
'相关测试
property get testnode
testnode = xmldoc.childnodes(0).text
end property
end class
private objxml
private xmldoc
private xmlpath
'//============================================================
'
sub class_initialize
set objxml = server.createobject("msxml2.domdocument")
objxml.preservewhitespace = true
objxml.async = false
end sub
sub class_terminate
set objxml = nothing
end sub
'//============================================================
'
public function createnew(sname)
set tmpnode = objxml.createelement(sname)
objxml.appendchild(tmpnode)
set createnew = tmpnode
end function
'
public function openxml(spath)
openxml=false
spath=server.mappath(spath)
'response.write(spath)
xmlpath = spath
if objxml.load(spath) then
set xmldoc = objxml.documentelement
openxml=true
end if
end function
'
public sub loadxml(sstr)
objxml.loadxml(sstr)
set xmldoc = objxml.documentelement
end sub
public sub inceptxml(xobj)
set objxml = xobj
set xmldoc = xobj.documentelement
end sub
'//============================================================
'
public function addnode(snode,rnode)
' snode string 节点名称
' rnode object 增加节点的上级节点引用
'=============================================================
dim tmpnode
set tmpnode = objxml.createelement(snode)
rnode.appendchild tmpnode
set addnode = tmpnode
end function
'
public function addattribute(sname,svalue,onode)
' sname string 属性名称
' svalue string 属性值
' onode object 增加属性的对象
'=============================================================
onode.setattribute sname,svalue
end function
'
public function addtext(fstr,cdbool,onode)
dim tmptext
if cdbool then
set tmptext = objxml.createcdatasection(fstr)
else
set tmptext = objxml.createtextnode(fstr)
end if
onode.appendchild tmptext
end function
'========================================================================================================
'
public function getatt(aname,onode)
' aname string 属性名称
' onode object 节点引用
'=============================================================
dim tmpvalue
tmpvalue = onode.getattribute(aname)
getatt = tmpvalue
end function
'
public function getnodename(onode)
' onode object 节点引用
getnodename = onode.nodename
end function
'
public function getnodetext(onode)
' onode object 节点引用
getnodetext = onode.childnodes(0).nodevalue
end function
'
public function getnodetype(onode)
' onode object 节点引用
getnodetype = onode.nodevalue
end function
'
public function findnodes(snode)
dim tmpnodes
set tmpnodes = objxml.getelementsbytagname(snode)
set findnodes = tmpnodes
end function
'
public function findnode(snode)
dim tmpnode
set tmpnode=objxml.selectsinglenode(snode)
set findnode = tmpnode
end function
'
public function delnode(snode)
dim tmpnodes,nodesss
set tmpnodes=objxml.selectsinglenode(snode)
set nodesss=tmpnodes.parentnode
nodesss.removechild(tmpnodes)
end function
'
public function replacenode(snode,stext,cdbool)
'replacechild
dim tmpnodes,tmptext
set tmpnodes=objxml.selectsinglenode(snode)
'addtext stext,cdbool,tmpnodes
if cdbool then
set tmptext = objxml.createcdatasection(stext)
else
set tmptext = objxml.createtextnode(stext)
end if
tmpnodes.replacechild tmptext,tmpnodes.firstchild
end function
private function processinginstruction
'//--创建xml声明
dim objpi
set objpi = objxml.createprocessinginstruction("xml", "version="&chr(34)&"1.0"&chr(34)&" encoding="&chr(34)&"gb2312"&chr(34))
'//--把xml生命追加到xml文档
objxml.insertbefore objpi, objxml.childnodes(0)
end function
'//=============================================================================
'
public function savexml()
'processinginstruction()
objxml.save(xmlpath)
end function
'
public function saveasxml(spath)
processinginstruction()
objxml.save(spath)
end function
'//==================================================================================
'相关统计
'
property get root
set root = xmldoc
end property
'
property get length
length = xmldoc.childnodes.length
end property
'//==================================================================================
'相关测试
property get testnode
testnode = xmldoc.childnodes(0).text
end property
end class
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,有人也称之为数据压缩技术,顾名思义,xml是可以充当数据库来用。
所以,我们可以把xml看成是“小型的数据库”。为什么说是小型呢?因为xml本身的功能及应用方便,与数据库还是存在着一定的差别。那我们为什么要使用xml呢?因为,有时候我们的一些应用程序虽然进行数据存取,但是,如果使用数据库的话,显行有些不够灵活,方便。这个时候,我们就应该结合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
%>
____________________
本文未经测试,文章可行度未知。
下一篇: vue中实现高德定位功能