您的位置:首页 > 编程语言 > ASP

ASP遍历XML节点

2010-05-12 17:18 295 查看
遍历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

%>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: