XML中的元素和节点有啥区别?

Posted

技术标签:

【中文标题】XML中的元素和节点有啥区别?【英文标题】:What's the difference between an element and a node in XML?XML中的元素和节点有什么区别? 【发布时间】:2010-09-13 01:14:44 【问题描述】:

我正在使用 XML 使用 Java,我想知道;元素和节点有什么区别?

【问题讨论】:

forums.asp.net/t/443912.aspx/1#443940 的精彩评论:水果和苹果之间的相同。每个 XmlElement 都是 XmlNode,但不是每个 XmlNode 都是 XmlElement。 XmlElement 只是一种 XmlNode。其他还有 XmlAttribute、XmlText 等。 元素是格式良好的 XML 文档的正式定义的一部分,而节点被定义为用于处理 XML 文档的文档对象模型的一部分。 【参考方案1】:

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

节点可以是元素节点、属性节点、文本节点或“节点类型”一章中介绍的任何其他节点类型。

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

【讨论】:

现在我明白了答案......惯例很愚蠢。话应该反过来。在自然英语中,“元素”是最基本的构建块,其他一切都是由它构建的。即自然英语中的一个元素更通用...... @Juan Mendes:根据 DOM,这就是它们的含义,但 Sam 的观点是 DOM 认为节点比元素更基本(原始),而“元素”实际上是指最基本的构建块用英语。 @SamSvenbjorgchristiensensen 这不太准确。元素可以进一步分解为“组成部分”,如质子、中子和电子,而这些部分又可以分解为夸克、中微子等。最好理解graph theory中的“节点”是什么意思,然后你就会明白为什么 XML 设计者选择了这个名称(DOM 只是一个层次图)。 @LesHazlewood 实际上,“元素”这个词被用来描述物理元素(氢、氦等),因为他们确实认为这些东西是不可分割的。直到很久以后他们才发现他们错了——改名太晚了; ) 我同意 Sam 的观点,他们命名和区分 dom 元素与节点的方式令人困惑且考虑不周(就像 html 规范中的大部分内容一样)。 @BT 如果 XML 规范委员会生活在古希腊,您的论点将站得住脚:) 他们没有,因此,现代(字典)定义的元素(清楚地)代表组成部分使得感觉。再加上节点的图论知识,真的没有太多解释的余地​​了。【参考方案2】:

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

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

Document -- Element(最多 一),ProcessingInstructionComment, DocumentType DocumentFragment -- Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference DocumentType-- 没有小孩 EntityReference -- Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference Element -- Element, Text, Comment, ProcessingInstruction, CDATASection, EntityReference Attr -- Text, EntityReference ProcessingInstruction - 没有小孩 Comment -- 没有 孩子们 Text -- 没有 孩子们 CDATASection-- 没有小孩 Entity -- Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference Notation -- 没有 孩子们

XML Infoset(由 XPath 使用)有一组较小的节点:

文档信息项 元素信息项 属性信息项 处理指令信息项 未扩展的实体参考信息项 字符信息项 评论信息项 文档类型声明信息项 未解析的实体信息项 符号信息项 命名空间信息项

XPath 有以下节点类型:

根节点 元素节点 文本节点 属性节点 命名空间节点 处理指令节点 评论节点

你的问题的答案元素和节点有什么区别”是:

An element is a type of node. Many other types of nodes exist and serve different purposes.

【讨论】:

【参考方案3】:

Node 是 DOM 树的一部分,Element 是 Node 的一种特殊类型

例如 <foo> This is Text </foo>

你有一个 foo 元素(它也是一个节点,因为 Element 继承自 Node)和一个文本节点“这是文本”,它是 foo 元素/节点的子节点

【讨论】:

这个简短的例子让我比选择的答案更能理解。【参考方案4】:

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

【讨论】:

【参考方案5】:

如各种 XML specifications 中所述,element 是由一个开始标记和结束标记以及它们之间的内容组成的,或者是一个空元素标记(没有内容或结束标记)。换句话说,这些都是元素:

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

虽然您听说“节点”的含义大致相同,但它并没有根据 XML 规范进行精确定义。它通常用于指代 DOM 等事物的节点,这些节点可能与 XML 密切相关,或者使用 XML 来表示。

【讨论】:

【参考方案6】:

xml 文档由嵌套元素组成。一个元素从它的开始标签开始,到它的结束标签结束。您可能在 html 中看到过 &lt;body&gt;&lt;/body&gt;。开始标签和结束标签之间的所有内容都是元素的内容。如果一个元素是由一个自闭合标签定义的(例如&lt;br/&gt;),那么它的内容就是空的。

开始标签也可以指定属性,例如。 &lt;p class="rant"&gt;。在此示例中,属性 name 为“类”,其 为“rant”。

XML 语言没有“节点”之类的东西。 Read the spec,这个词没有出现。

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

【讨论】:

这个词确实出现了:“(即,正则表达式的语法树中的每个叶节点)”。它在一个非规范性附录中,但它确实发生了。在那里,该术语被用作解析树中的节点。 即使有人认为 XML 定义没有提及节点,但为 XML 的编程解释和操作定义的文档对象模型 (DOM)(由同一标准组织)确实定义和使用了该术语“节点”。该答案无助于区分这些术语,并且通过断言它们的含义相同而忽略各种用法也无济于事。【参考方案7】:

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

【讨论】:

【参考方案8】:

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

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

【讨论】:

【参考方案9】:

一个节点是defined:

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

或作为:

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

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

【讨论】:

【参考方案10】:

现在我知道了,元素是节点之一

这里的所有节点类型“http://www.w3schools.com/dom/dom_nodetype.asp”

元素在开始标签和结束标签之间

所以文本节点是一个节点,而不是一个元素。

【讨论】:

【参考方案11】:

元素是一种节点,属性、文本等也是。

【讨论】:

【参考方案12】:

XML 元素是一个 XML 节点,但带有属性等附加元素。

<a>Lorem Ipsum</a>  //This is a node

<a id="sample">Lorem Ipsum</a>  //This is an element

【讨论】:

我不认为您对此声明有任何来源?例如,XML 标准将术语“元素”定义为空元素标记或从开始标记(包括开始标记)到结束标记(包括结束标记)的所有内容。一个开始标签和空元素标签确实 not 需要有任何元素。你的两个例子都是元素。术语“节点”在其他地方定义,在 DOM 中是关于对象模型而不是在文本本身中。【参考方案13】:

节点和元素相同。每个元素都是一个节点,但并不是每个节点都必须是一个元素。

【讨论】:

由于“不是每个节点都必须是一个元素”,因此“节点和元素相同”的说法是错误的。 除了你的描述是错误的,它也不是很有用。您唯一正确的是术语之间存在一些差异,但问题是有什么区别。

以上是关于XML中的元素和节点有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

DOM节点和DOM元素的区别

我的节点 package.json 中的 cores 和 cors 有啥区别?

scikit-learn DecisitonTreeClassifier 中的阈值和特征(对于每个训练的节点)有啥区别?

cassandra nosql 数据库中的节点、集群和数据中心之间有啥区别?

xpath 路径表达式。node()和*的区别

XML的解析方式有哪几种?有什么区别?