欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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


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
%>
____________________

本文未经测试,文章可行度未知。