📄 0802-0403.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0071)http://162.105.170.55/ASPs/GetLearningArticleTemp.asp?section=0802-0403 -->
<HTML><HEAD><TITLE>XML中国论坛 - 初学进阶 - 8.2.4.3 遍历XML文档</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>TABLE {
FONT-SIZE: 9pt; COLOR: black; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"
}
.pt9 {
FONT-SIZE: 9pt; COLOR: black; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"
}
.pt10 {
FONT-WEIGHT: 700; FONT-SIZE: 10pt; LINE-HEIGHT: 18pt; FONT-FAMILY: "宋体"
}
.TempOutline {
FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; COLOR: #666666; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.TempOutline1 {
FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; COLOR: #666666; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.Outline {
FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.Outline1 {
FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.Outline11 {
FONT-SIZE: 9pt; MARGIN-LEFT: 38pt; TEXT-INDENT: -50pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.passage0 {
FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.passage1 {
FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.passage11 {
FONT-SIZE: 9pt; MARGIN-LEFT: 38pt; TEXT-INDENT: -50pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
.passage111 {
FONT-SIZE: 9pt; MARGIN-LEFT: 51pt; TEXT-INDENT: -64pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋体"; TEXT-DECORATION: none
}
</STYLE>
<META content="Microsoft FrontPage 5.0" name=GENERATOR></HEAD>
<BODY vLink=#000000 aLink=#000000 link=#000000 leftMargin=0 topMargin=0
onload=""><!-- 以下为主体内容 -->
<div align="center">
<center>
<TABLE width="100%" border=0 style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">
<TBODY>
<TR vAlign=top>
<TD width=39 rowSpan=2></TD>
<TD vAlign=center width="504">
<p align="center"><IMG height=33
src="image/title_learner.gif" width=226></TD>
<TD width=43 rowSpan=2></TD>
</TR>
<TR vAlign=top>
<TD width="504" ><!-- 正文内容 -->
<DIV class=pt10><B>8.2.4.3 遍历XML文档</B></DIV>
<DIV></DIV><BR>
<DIV class=pt9>
<P>现在,我们已经可以通过DOM来创建XML文档对象,并加载XML文档了。对于已经加载的文档,我们要从文档中获取所需要的内容,这就要求能够通过DOM树来访问树中的任何一个节点,也就是对DOM树的遍历。下面我们依旧以client.xml为例,通过几个实例来说明如何遍历DOM树中的节点。</P>
<P>首先,我们要获取XML文档的根元素节点,用VBScript语言描述这个操作如下:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%">root =
myDocument.documentElement</TD></TR></TBODY></TABLE></CENTER></DIV>
<P>该语句的实际含义如下图黄色箭头所示。</P><FONT face=宋体 size=3>
<P align=center><IMG height=261
src="image/TU000000-0802-0403-01.gif" width=471></FONT></P>
<P>在得到了文档的根元素节点之后,我们又将如何访问其他元素呢?以文档中的第二个person元素为例,对该元素节点以及其子节点的访问可以通过下面的方式来实现:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%">personNode = root.childNodes.item(1)<BR>nameNode =
personNode.childNodes.item(0)<BR>textNode =
nameNode.childNodes.item(0)<BR>theName =
textNode.nodeValue</TD></TR></TBODY></TABLE></CENTER></DIV>
<P>上述访问语句执行后,theName的值是"李四"。下图黄色箭头给出了这一访问过程的示意:</P><FONT face=宋体 size=3>
<P align=center><IMG height=308
src="image/TU000000-0802-0403-02.gif" width=471></FONT></P>
<P>在上面的代码中,root是文档的根元素节点addressbook节点,personNode和nameNode都是元素类型的节点,textNode是TEXT类型的节点,theName是一个字符串。</P>
<P>childNodes是NodeList类型的属性,item是NodeList接口中Node类型的属性,通过item可以访问NodeList节点集合中的任意节点(这儿有一点需要注意,当我们要访问根元素节点addressbook的第二个person子节点personNode时,我们用的索引参数是"1",这是因为item中的索引参数是从0开始的,如果我们要访问节点集合中的第一个节点,则应该用item(0)来表示)。</P>
<P>在DOM规范中,要访问元素节点的文本内容,需要先得到元素节点的TEXT子节点,再通过TEXT节点的属性获取文本内容。微软在实现DOM接口时对DOM进行了部分扩展,可以通过元素类型节点的text属性直接获得元素中的文本内容。具体实用说明可以参考微软msdn中的帮助。</P>
<P>上面的例子给出了如何访问DOM树中的元素节点,对于DOM树中的属性节点,访问方法略有不同,可以通过下面的语句来实现:</P>
<DIV align=center>
<CENTER>
<TABLE width="80%" border=1>
<TBODY>
<TR>
<TD width="100%">attr =
node.attributes.getNamedItem("sex")<BR>attrContent =
attr.nodeValue</TD></TR></TBODY></TABLE></CENTER></DIV>
<P>上述访问语句执行后,attrContent的值是"male"。下图用黄色箭头标出了这一访问的过程。</P><FONT face=宋体
size=3>
<P align=center><IMG height=261
src="image/TU000000-0802-0403-03.gif" width=502></FONT></P>
<P>在上面的代码中,attr是属性类型的节点,attributes是NamedNodeMap类型的属性,getNamedItem是NamedNodeMap接口中的方法。属性的内容可以通过属性节点的nodeValue来获得。</P></DIV>
<P></P>
<P></P></TD></TR></TBODY></TABLE>
</center>
</div>
<P></P>
<P>
<P></P></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -