ASP XML操作类代码

复制代码 代码如下:
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

  %>

  ____________________

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