XML中元素和节点有什么区别?

405

我正在使用Java和XML进行开发,想知道“元素”和“节点”的区别是什么?


18
来自http://forums.asp.net/t/443912.aspx/1#443940的精彩评论:*与水果和苹果之间的关系相同。每个 XmlElement 都是 XmlNode,但并非每个 XmlNode 都是 XmlElement。 XmlElement 只是 XmlNode 的一种类型,其他类型包括 XmlAttribute、XmlText 等。* - atconway
2
元素是良好形式的XML文档的正式定义的一部分,而节点被定义为处理XML文档的文档对象模型的一部分。 - Jool
13个回答

284

Node对象是整个DOM的主要数据类型。

一个节点可以是元素节点、属性节点、文本节点或其他在“节点类型”章节中解释的节点类型。

XML元素包括从(包括)元素的开始标记到(包括)元素的结束标记的所有内容。


137
现在我明白了答案...这个惯例很愚蠢。这些词应该颠倒过来。在自然的英语语言中,“元素”是最基本的基础单元,所有其他东西都是由它构建而成的。也就是说,自然英语中的“元素”更为通用... - Sam Svenbjorgchristiensensen
14
根据DOM的定义,它们是节点,但是Sam的观点是DOM认为节点比元素更基础(原始),而“元素”实际上是英语中最基本的构建块。 - BoltClock
17
@SamSvenbjorgchristiensensen 那并不完全准确。元素可以进一步分解为“组成部分”,如质子、中子和电子,这些又可以被分解为夸克、中微子等等。最好理解一下 图论 中“节点”的意思,然后你就会明白为什么 XML 设计者选择了这个名称(DOM只是一个分层图)。 - Les Hazlewood
23
@LesHazlewood 实际上,“元素”一词被用来描述物理元素(氢、氦等),因为人们认为这些东西是不可分割的。直到后来才发现他们错了,但是为时已晚,无法更改名称;)我同意Sam的观点,他们命名和区分DOM元素与节点的方式令人困惑且缺乏深思熟虑(正如HTML规范的许多部分一样)。 - B T
3
如果XML规范委员会生活在古希腊,你的论点或许成立。然而他们没有,因此现代(词典)对元素的定义更合理,它清晰地表示组成部分。再加上节点的图论知识,就没有太多的解释余地了。 - Les Hazlewood
显示剩余5条评论

71

不同的W3C规范定义了不同的“节点”类型。

因此,DOM规范定义了以下类型的节点:

  • Document -- Element(最多一个)ProcessingInstructionCommentDocumentType
  • DocumentFragment -- ElementProcessingInstructionCommentTextCDATASectionEntityReference
  • DocumentType -- 无子节点
  • EntityReference -- ElementProcessingInstructionCommentTextCDATASectionEntityReference
  • Element -- ElementTextCommentProcessingInstructionCDATASectionEntityReference
  • Attr -- TextEntityReference
  • ProcessingInstruction -- 无子节点
  • Comment -- 无子节点
  • Text -- 无子节点
  • CDATASection -- 无子节点
  • Entity -- ElementProcessingInstructionCommentTextCDATASectionEntityReference
  • Notation -- 无子节点

XML Infoset(XPath使用)具有较小的节点集:

  • 文档信息项
  • 元素信息项
  • 属性信息项
  • 处理指令信息项
  • 未扩展实体引用信息项
  • 字符信息项
  • 注释信息项
  • 文档类型声明信息项
  • 未解析实体信息项
  • 符号信息项
  • 命名空间信息项
  • XPath具有以下节点类型:

    • 根节点
    • 元素节点
    • 文本节点
    • 属性节点
    • 命名空间节点
    • 处理指令节点
    • 注释节点

    回答你的问题 "元素和节点之间有什么区别" 是:

    元素是节点类型之一。许多其他类型的节点存在并具有不同的目的。


    46

    节点是DOM树的一部分,元素是节点的一种特定类型

    例如:<foo> 这是文本 </foo>

    你有一个名为 foo 的元素(它也是一个节点,因为元素继承自节点),以及一个名为“这是文本”的文本节点,该文本节点是 foo 元素/节点的子级。


    16
    这个简短的例子让我比选出的答案更加理解。 - KMC

    27

    节点可以是许多不同类型的事物:一些文本、注释、元素、 实体等。 元素是一种特定类型的节点。


    16

    如各种XML 规范所述,一个元素由开始标记、结束标记和两者之间的内容组成,或者是一个空元素标记(没有内容或结束标记)。换句话说,以下都是元素:

    <foo> stuff </foo>
    <foo bar="baz"></foo>
    <foo baz="qux" />
    

    尽管你会听到"node"被用来表示大致相同的含义,但它在XML规范中没有明确定义。通常用于指代DOM之类的节点,这些节点可能与XML密切相关或使用XML进行表示。


    12

    一个 XML 文档由嵌套的元素构成。一个元素从它的开始标签开始,到它的结束标签结束。你可能在 HTML 中看到过 <body></body>。在开始和结束标签之间的所有内容都是该元素的内容。如果一个元素由自闭合标签定义(例如<br/>),那么它的内容就为空。

    开始标签还可以指定属性,例如:<p class="rant">。在这个例子中,属性名称为"class",其为"rant"。

    XML 语言没有所谓的“节点”。请阅读规范,这个词没有出现。

    有些人非正式地使用“节点”一词来表示元素,这很令人困惑,因为一些解析器也赋予了这个词技术含义(识别“文本节点”和“元素节点”)。确切的含义取决于解析器,因此该词没有明确定义,除非声明使用的解析器。如果你指的是元素,请说“元素”。


    这个词确实出现了:“(即正则表达式语法树中的每个叶节点)”。它在一个非规范性的附录中,但仍然出现了。在那里,该术语被用作解析树中的节点。 - skyking
    即使有人认为XML定义没有提到节点,但是用于程序解释和操作XML的文档对象模型(DOM)(由同一标准组织定义)确实定义并使用了术语“节点”。这个答案并没有帮助区分这些术语,也不能仅仅通过断言它们意思相同来忽略它们的各种用法。 - C Perkins

    9

    节点是元素和属性(以及基本上所有其他XML表示形式)的基类。


    9

    元素是唯一一种可以拥有子节点和属性的节点

    文档也有子节点,但是
    没有属性,没有文本,只有一个子元素。


    2
    一个节点被定义为:

    在文档中,有效、完整结构的最小单位。

    或者:

    树形视图中的一个对象,用作容器来保存相关对象。

    现在有许多不同种类的节点,如元素节点、属性节点等。


    1

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接