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
(最多
一),ProcessingInstruction
,
Comment
, 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 中看到过 <body>
和 </body>
。开始标签和结束标签之间的所有内容都是元素的内容。如果一个元素是由一个自闭合标签定义的(例如<br/>
),那么它的内容就是空的。
开始标签也可以指定属性,例如。 <p class="rant">
。在此示例中,属性 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中的元素和节点有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
我的节点 package.json 中的 cores 和 cors 有啥区别?
scikit-learn DecisitonTreeClassifier 中的阈值和特征(对于每个训练的节点)有啥区别?