首  页
站长信箱
868搜索
网站登录
免费计数器
免费留言本
IP来源查询
网站技术教程
网站流量统计
文章探索:   分类:    关键字:  
    什么?你还在找兼职?上兼客吧,现在兼客吧平台太火了,知名度和诚信度也很高,注册就送0.5元现金,满3元就能提现,马上到账了!最低3元就能提现,大家可以注册下试试!注册地址:http://www.jiankeba.com/computeryc1688
  + 栏目导航
  + 相关文章
用ASP生成XML数据文档(RSS订阅..
asp添加xml节点问题
Asp.net+Xml实现无数据库论坛(..
Asp.net+Xml实现无数据库论坛(..
Asp.net+Xml实现无数据库论坛(..
js添加、修改、删除xml节点例子
ASP.NET查找XML节点的几个方法
使用ASP添加xml节点功能
使用asp修改xml中的节点
ASP历遍XML节点与字节点之简单..
ASP向xml文件中的添加节点
ASP遍历XML节点
asp修改xml节点属性
小白ajax定时更新xml数据练习
Ajax核心:XMLHTTP组件相关技术..
远程获取内容,并将内容存在本..
xmlhttp组件获取远程文件并筛选..
XMLHTTP对象及其方法
把HTML表单提交的数据转化成XML..
利用XMLHTTP无刷新添加数据之Po..
Js+Xml:不刷新页面获取对应网址..
xml(元标记语言)学习基础一
Java语言编程中更新XML文档的常..
简析JAVA中的XML编程
XML及其技术指南
XML教程(2)--XML元素与XML属性..
XML教程(1)--严格的语法
从XML到Java代码的数据绑定之一
神奇的XML--突破CGI权限的约束
基于XML的数据库总体分析

技术教程 -> XML教程 ->  
ASP遍历XML节点
来源:转载   人气:3358   录入时间:2008/12/29


    遍历XML文档
   对于下面的一段XML代码:
   XML文档实例books.xml,如下所示:
   
   <?xml version="1.0" encoding="gb2312" ?>
   <books>
   <book status="已售完">
   <author>破破</author>
   <title>XML入门</title >
   </book>
   <book status="热卖中">
   <author>坏坏</author>
   <title>XML提高</title>
   </book>
   </books>
   我们已经可以创建XML文档对象,并加载XML文档了。对于已经加载的文档,我们要从文档中获取所需要的内容,这就要求能够通过DOM树来访问树中的任何一个节点,也就是对DOM树的遍历。
   
   下面我们依旧以books.xml为例,通过几个实例来说明如何遍历DOM树中的节点。
   
   首先,我们要获取XML文档的根元素节点,用VB描述这个操作如下:
   
   Set root = myDocument.documentElement
   
   现在,我们已经得到了文档的根元素节点,对于其他元素,我们如何获得对它的访问呢?以文档中的第二个book元素为例,对该元素节点以及其子节点的访问可以通过下面的方式来实现。
   
   Set bookNode = root.childNodes.item(1)
   Set authorNode = bookNode.childNodes.item(0)
   Set textNode = authorNode.childNodes.item(0)
   Set theName = textNode.nodeValue
   
   上述访问语句执行后,theName的值是"坏坏"。
   
   在上面的代码中,root是文档的根元素节点books节点,bookNode和authorNode都是元素类型的节点,textNode是TEXT类型的节点,theName是一个字符串。
   
   childNodes是NodeList类型的属性,item是NodeList接口中Node类型的属性,通过item可以访问NodeList节点集合中的任意节点(这儿有一点需要注意,当我们要访问根元素节点books的第二个book子节点bookNode时,我们用的索引参数是"1",这是因为item中的索引参数是从0开始的,如果我们要访问节点集合中的第一个节点,则应该用item(0)来表示)。
   
   在DOM规范中,要访问元素节点的文本内容,需要先得到元素节点的TEXT子节点,再通过TEXT节点的属性获取文本内容。微软在实现DOM接口时对DOM进行了部分扩展,可以通过元素类型节点的text属性直接获得元素中的文本内容。具体实用说明可以参考微软msdn中的帮助。
   
   上面的例子给出了如何访问DOM树中的元素节点,对于DOM树中的属性节点,访问方法略有不同,可以通过下面的语句来实现:
   
   Set bookNode = root.childNodes.item(1)
   Set attr = bookNode.attributes.getNamedItem("status")
   attrContent = attr.nodeValue
   
   上述访问语句执行后,attrContent的值是"热卖中"。
   
   在上面的代码中,attr是属性类型的节点,attributes是NamedNodeMap类型的属性,getNamedItem是NamedNodeMap接口中的方法。属性的内容可以通过属性节点的nodeValue来获得。
   
   //////////////////////////////////////////
   
   <%
   Dim xmlDom, rootNode
   xmlFileName = "test.xml"
   Set xmlDom = Server.CreateObject("Microsoft.XMLDOM")
   ''set objRetValNode As MSXML.IXMLDOMNode
   ''set objRetValNode=xmldom.IXMLDOMNode
   xmlDom.async = false
   If not xmlDom.load(Server.MapPath(xmlFileName)) Then
   response.Write ("没有这个会员")
   respoonse.end
   Else
   Set xmlNode = xmlDom.documentElement.childNodes(0)
   ''Set rootNode = xmlDom.documentElement
   ''set EYuan=rootNode.selectSingleNode("//UserData/UserInfo/EYuan")
   ''response.write EYuan
   Set objRetValNode = xmlDom.documentElement
   Set objRetValNode = xmlDom.selectSingleNode(".//UserData/UserInfo/EYuan")
   Response.write objRetValNode.Text
   ''response.write getNodeList(xmlFileName,"UserName")
   '' For i = 0 To xmlNode.childNodes.length - 1
   ''response.write xmlNode.childNodes(i).nodeName
   ''response.write " "
   ''response.write xmlNode.childNodes(i).Text
   ''response.write "<br/>"
   ''Next
   End If
   
   %>
   
   <?xml version="1.0" encoding="gb2312"?>
   <UserData>
   <UserInfo>
   <UserName>testEnte</UserName>
   <UserEmail>cecte@163.com</UserEmail>
   <EYuan>20</EYuan>
   <iDate>2003-12-20 0:03:53</iDate>
   </UserInfo>
   <其他节点>
   <Company>公司名称</Company>
   </其他节点>
   </UserData>
   
   /////////////////////////////////////////
   
   遍历属性
   
   <%
   s="<root><booklist><book name=''xml'' /><book id=''0002'' name=''asp'' /> <book id=''0003'' name=''jsp'' /></booklist><bookfav> <item name=''xml'' id=''0001''/> <item name=''asp'' id=''0002''/> <item name=''jsp'' id=''0003''/></bookfav></root>"
   set d= server.createobject("msxml2.domdocument")
   d.loadXML s
   set n = d.selectNodes("//book")
   for each node in n
   for i = 0 to node.attributes.length - 1
   Response.write node.attributes(i).name & "=" & node.attributes(i).value & " "
   next
   Response.write "<p>"
   next
   %>
   
   操作xml文档 ////////////////////////////////////////////////////////
   
   Dom操作xml的常用方法
   
   (Dom的全部方法和属性可到vs的对象浏览器察看)
   
   ''创建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
   
   <%
   
   dim xmldoc,node
   
   set xmldoc=server.CreateObject("msxml2.domdocument")
   
   xmldoc.async=false ''异步传输
   
   xmldoc.loadXML "<ROOT/>"
   
   xmldoc.createProcessingInstruction "xml","version=''1.0'' encoding=''gb2312''"
   
   set node=xmlCreateNode(xmldoc,xmldoc.documentElement,"user",0,0,"")
   
   xmlCreateNode xmldoc,node,"name",1,1,"ssm1226"
   
   xmlCreateNode xmldoc,node,"name",0,1,"呢称:雨中人"
   
   ''*********************************************************
   
   ''函数功能:添加子节点或属性
   
   ''xmldoc--XML DOM Object
   
   ''xmldocObj--要添加目的节点对象
   
   ''EleNameOrAttName--节点名或属性名
   
   ''Key--0-节点;1-属
   
   ''ifTxt--是否有内容0-无;1-有
   
   ''Text--当ifTxt=1时有效,内容
   
   ''By ''版权信息:author:ssm1226 ;data:2003-1-2;copyright:yeboss.net
   
   ''*********************************************************
   
   function xmlCreateNode(xmldoc,xmldocObj,EleNameOrAttName,Key,ifTxt,Text)
   
   If Key=0 then
   
   Dim SubNode
   
   set SubNode=xmldoc.createElement(EleNameOrAttName)
   
   if ifTxt=1 then SubNode.text=Text
   
   xmldocObj.appendChild SubNode
   
   set xmlCreateNode=subNode
   
   set SubNode=Nothing
   
   ElseIf Key=1 then
   
   Dim AttNode
   
   set AttNode=xmldoc.createAttribute(EleNameOrAttName)
   
   if ifTxt=1 then AttNode.text=Text
   
   xmldocObj.attributes.setNamedItem AttNode
   
   set xmlCreateNode=AttNode
   
   set AttNode=Nothing
   
   End If
   
   end function
   
   Response.Write xmldoc.xml
   
   
   



| 网站转让 | 站长信箱 | 网站登录 | 技术教程 | 免费计数器 | 免费留言本 | 868流量统计 | 好帮手网站营销 |
地址:广东省阳江市  联系电话:13725641179 杨先生
Copyright 2004-2019 868资源网- 版权所有    粤ICP备05007330号