以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 DOM/SAX/XPath 』  (http://bbs.xml.org.cn/list.asp?boardid=11)
----  DOM的四个基本接口  (http://bbs.xml.org.cn/dispbbs.asp?boardid=11&rootid=&id=9220)


--  作者:卷积内核
--  发布时间:8/9/2004 10:20:00 AM

--  DOM的四个基本接口
在DOM接口规范中,有四个基本的接口:Document,Node,NodeList以及NamedNodeMap。在这四个基本接口中,Document接口是对文档进行操作的入口,它是从Node接口继承过来的。Node接口是其他大多数接口的父类,象Documet,Element,Attribute,Text,Comment等接口都是从Node接口继承过来的。NodeList接口是一个节点的集合,它包含了某个节点中的所有子节点。NamedNodeMap接口也是一个节点的集合,通过该接口,可以建立节点名和节点之间的一一映射关系,从而利用节点名可以直接访问特定的节点。下面将对这四个接口分别做一些简单的介绍。

Document接口
Document接口代表了整个XML/HTML文档,因此,它是整棵文档树的根,提供了对文档中的数据进行访问和操作的入口。

由于元素、文本节点、注释、处理指令等都不能脱离文档的上下文关系而独立存在,所以在Document接口提供了创建其他节点对象的方法,通过该方法创建的节点对象都有一个ownerDocument属性,用来表明当前节点是由谁所创建的以及节点同Document之间的联系。

在DOM树中,Document接口同其他接口之间的关系如下图所示:

由图可以看出,Document节点是DOM树中的根节点,也即对XML文档进行操作的入口节点。通过Docuemt节点,可以访问到文档中的其他节点,如处理指令、注释、文档类型以及XML文档的根元素节点等等。另外,从上图我们还可以看出,在一棵DOM树中,Document节点可以包含多个处理指令、多个注释作为其子节点,而文档类型节点和XML文档根元素节点都是唯一的。

关于Document接口的IDL(Interface Definition Language接口定义语言)定义和其中一些比较常用的属性和方法的详细介绍在许多参考书都可以找到,我们将在后面结合实际例子给予介绍。

Node接口
Node接口在整个DOM树中具有举足轻重的地位,DOM接口中有很大一部分接口是从Node接口继承过来的,例如,Element、Attr、CDATASection等接口,都是从Node继承过来的。在DOM树中,Node接口代表了树中的一个节点。一个典型的Node接口如下图所示:

如图所示,Node接口提供了访问DOM树中元素内容与信息的途径,并给出了对DOM树中的元素进行遍历的支持。

同样,我们将在后面结合实际例子详细说明Node接口的具体使用方法。

NodeList接口
NodeList接口提供了对节点集合的抽象定义,它并不包含如何实现这个节点集的定义。NodeList用于表示有顺序关系的一组节点,比如某个节点的子节点序列。另外,它还出现在一些方法的返回值中,例如GetNodeByName。

在DOM中,NodeList的对象是"live"的,换句话说,对文档的改变,会直接反映到相关的NodeList对象中。例如,如果通过DOM获得一个NodeList对象,该对象中包含了某个Element节点的所有子节点的集合,那么,当再通过DOM对Element节点进行操作(添加、删除、改动节点中的子节点)时,这些改变将会自动地反映到NodeList对象中,而不需DOM应用程序再做其他额外的操作。

NodeList中的每个item都可以通过一个索引来访问,该索引值从0开始。

NamedNodeMap接口
实现了NamedNodeMap接口的对象中包含了可以通过名字来访问的一组节点的集合。不过注意,NamedNodeMap并不是从NodeList继承过来的,它所包含的节点集中的节点是无序的。尽管这些节点也可以通过索引来进行访问,但这只是提供了枚举NamedNodeMap中所包含节点的一种简单方法,并不表明在DOM规范中为NamedNodeMap中的节点规定了一种排列顺序。

NamedNodeMap表示的是一组节点和其唯一名字的一一对应关系,这个接口主要用在属性节点的表示上。
与NodeList相同,在DOM中,NamedNodeMap对象也是"live"的。


--  作者:priyan
--  发布时间:10/16/2004 4:37:00 PM

--  
收益颇多,谢谢

--  作者:priyan
--  发布时间:10/16/2004 4:37:00 PM

--  
收益颇多,谢谢

--  作者:lizhijie97
--  发布时间:10/18/2004 10:00:00 AM

--  
写的非常好  我正在做一个 DELPHI 下 用DOM组件 对XML进行遍历

请问斑竹 如何做  或者如何做最方便 或者如何做算法效率最高

当然是以先实现为基础了 谢谢


--  作者:kingbillow
--  发布时间:10/18/2004 11:22:00 AM

--  
没有具体的例子吗
--  作者:ikeeper
--  发布时间:10/24/2004 4:57:00 AM

--  
不错,只是看不到那些图。。。
--  作者:xxw740723
--  发布时间:7/5/2005 8:03:00 PM

--  
收益颇丰,谢了!
--  作者:biao8848
--  发布时间:7/6/2005 9:02:00 AM

--  
学习中~
--  作者:chenxinmx
--  发布时间:7/26/2005 4:22:00 PM

--  
收益颇多,谢谢,
--  作者:binaryluo
--  发布时间:7/26/2005 8:07:00 PM

--  
up
--  作者:amions
--  发布时间:7/31/2005 11:25:00 AM

--  
只看接口规范还是不很明白。。。
--  作者:jipeng_first
--  发布时间:9/20/2005 10:14:00 AM

--  
谢谢搂住,强烈支持
--  作者:snopyer1125
--  发布时间:10/25/2005 9:00:00 AM

--  
好东西
--  作者:fengyhf
--  发布时间:11/14/2005 4:45:00 PM

--  
图在哪里?
--  作者:yu145
--  发布时间:12/8/2005 4:49:00 PM

--  
收益颇多,学习
--  作者:wangjia184
--  发布时间:12/15/2005 1:40:00 PM

--  
以下是引用lizhijie97在2004-10-18 10:00:00的发言:
写的非常好  我正在做一个 DELPHI 下 用DOM组件 对XML进行遍历

请问斑竹 如何做  或者如何做最方便 或者如何做算法效率最高

当然是以先实现为基础了 谢谢


如果讲究效率的话  SAX比 DOM快些

DOM的话 随便用个 深度有限 广度优先就可以了


--  作者:wangjia184
--  发布时间:12/15/2005 1:41:00 PM

--  
接上面
你也可以用 XPath的 //*
很方便的哦  根本不用遍历 直接出NodeList
--  作者:netstorm
--  发布时间:12/29/2005 1:39:00 PM

--  
xerces-c  中怎么用 xpath ?
--  作者:hqh200023607
--  发布时间:12/29/2005 5:45:00 PM

--  
讲得比较好!!顶!
--  作者:zz277
--  发布时间:4/16/2006 4:45:00 PM

--  

--  作者:sigrue
--  发布时间:4/30/2006 10:53:00 AM

--  
Thank you
--  作者:szmarine
--  发布时间:5/12/2006 5:03:00 PM

--  
各位没有图也能看得懂吗?把图贴上来看看。
--  作者:qingsongabc
--  发布时间:5/16/2006 5:25:00 PM

--  
i不错,继续啊

W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
156.250ms