XML中元素与节点的区别

2021年9月2日 19点热度 0条评论 来源: youxirenjia90

Element是Node的扩展,除了Element之外,Attribute(属性)、Text(文本节点)、PI(处理指令)、 Document(文档)等等都是Node。
例如,用Element可以方便的获得Node的属性getAttribute(String attrName)
如果用Node,可以得到一个属性集,还要进一步检索才可得到想要的属性。

 

出处:http://www.aspxhome.com/asp/xml/20082/303917.htm

 

XML文档对象模型(DOM)是什么?

可扩展标记语言XML的基础是 DOM。XML 文档具有一个称为节点的信息单元层次结构;DOM 是描述那些节点和节点间关系的方式即作为 XML 数据的概念性描述。它定义了 XML 文档中出现的对象,以及用于访问和处理这些对象的方法和属性。

作为结构的DOM

DOM 文档是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中导航仪寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作(在 XML 结构内引用、检索和更改 XML 结构中的各项)。由于它是基于信息层次的,因而 DOM 被认为是基于树或基于对象的。

另一方面,DOM 还提供了一个 API,允许开发人员添加、编辑、移动或删除树中任意位置的节点,从而创建一个引用程序读取和处理 XML 数据。

DOM 路标图

创建层次

在 DOM 中,使用 XML 信息意味着首先将它划分为节点。DOM 本质上是节点的集合。由于一个文档中可能包含不同类型的信息,因此要定义不同类型的节点。在创建 XML 文件的层次时,产生某些在概念上类似如下结构的内容是很自然的。虽然它是对所包括的数据的精确描述,但它不是对 DOM 所表示的数据的精确描述。这是因为它表示了元素 ,但是没有表示节点 。

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE ORDERS SYSTEM "orders.dtd">  
<orders> 
<order> 
<customerid limit="150">251222</customerid> 
<status>pending</status> 
<item instock="Y" itemid="WB78"> 
<name>Winter Blanket (78 inch)</name> 
<price>20</price> 
<qty>10</qty> 
</item> 
</order> 
<order> 
<customerid limit="1000">12341</customerid> 
<status>pending</status> 
<item instock="Y" itemid="SA15"> 
<name>Silver Show Saddle, 16 inch</name> 
<price>825.00</price> 
<qty>1</qty> 
</item> 
<item instock="N" itemid="C49"> 
<name>Premium Cinch</name> 
<price>49.00</price> 
<qty>1</qty> 
</item> 
</order> 
</orders>

 

 

元素和节点的区别

事实上,元素只是节点的一种类型,它们甚至不表示上图似乎要揭示的内容。 元素节点是信息的容器。该信息可能是其他元素节点、文本节点、属性节点或其他类型的信息。对该文档的更精确描绘如下:

 

 

 

矩形框表示元素节点,椭圆表示文本节点。 当一个节点包含在另一个节点之内时,它就被认为是后一个节点的孩子。

注意 orders 元素节点不是只有两个子节点,而是有五个子节点:两个 order 元素,以及它们之间后周围的文本节点。即使没有内容,order 元素之间的空白也会构成一个文本节点。类似地, item 具有七个子节点:name、price、qty,以及它们周围的四个文本节点。

(编者注:你可能会有疑问:在IE中编程时,如docmentElement.childNodes(0)却为第一个order 子元素节点,而不是相应的上面提到的空白文本节点;同样docmentElement.childNodes(1)却为第二个order 子元素节点。怎么会这样呢?这是因为IE所含的XML解析器为MSXML版本,它解析时忽略上面提到的空白文本节点;而在java中你就可以验证确实包含空白文本节点;在.NET中你设置xml文档的PreserveWhitespace属性为true,则包含空白文本节点,否则忽略。由此可见,不同的API实现DOM接口的方法不同。)还要注意,可能被认为是某个元素的内容的东西,比如“Premium Cinch”,实际上却是作为 name元素的子节点的文本节点的内容。(虽然本图并不完整,漏掉了属性节点以及其他内容。)

基本的节点类型

最常见的节点类型包括:

元素:元素是 XML 的基本构造模块。通常,元素拥有子元素、文本节点,或两者的组合。元素节点也是能够拥有属性的唯一节点类型。

属性:属性节点包含关于元素节点的信息,但是并不实际认为是元素的孩子,比如在下面的例子中: 

<customerid limit="1000">12341</customerid>

文本:文本节点就是名副其实的文本。它可以由更多信息组成,也可以只包含空白。 
文档:文档节点是文档中其他所有节点的父亲。

不太常见的节点类型:CDATA、注释、处理指令,以及文档片断

其他节点类型不太常用,但是在某些场合下仍然是必需的。

它们包括:

CDATA:字符数据(Character Data)的缩写,这是一个特殊的节点,它包含不应该被解析器分析的信息。相反,它包含的信息应该以纯文本传递。例如,可能会为了特殊目的而存储 HTML 标签。在通常情形下,处理器可能尝试为所存储的每个标签创建元素,而这样可能导致文档不是格式良好的。这些问题可用通过使用 CDATA 节(section)来避免。

注释:注释包括关于数据的信息,通常被应用程序忽略。

处理指令:处理指令是专门针对应用程序的信息。其中一些例子包括要执行的代码或者关于从何处寻找样式表的信息。

文档片断:要使文档成为格式良好的,它必须仅有一个根元素。有时在使用 XML 的时候,必须临时创建多组元素,这些元素不一定满足这个要求。文档片断看起来类似如下:

<item instock="Y" itemid="SA15"> 
<name>Silver Show Saddle, 16 inch</name> 
<price>825.00</price> 
<qty>1</qty> 
</item> 
<item instock="N" itemid="C49"> 
<name>Premium Cinch</name> 
<price>49.00</price> 
<qty>1</qty> 
</item>

其他类型的节点包括实体、实体引用节点,以及注解。

 

    原文作者:youxirenjia90
    原文地址: https://blog.csdn.net/youxirenjia90/article/details/52798643
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。