What's the difference between an element and a node in XML?
The Node object is the primary data type for the entire DOM.
A node can be an element node, an attribute node, a text node, or any other of the node types explained in the "Node types" chapter.
An XML element is everything from (including) the element's start tag to (including) the element's end tag.
Different W3C specifications define different sets of "Node" types.
Thus, the DOM spec defines the following types of nodes:
-
Document
--Element
(maximum of one),ProcessingInstruction
,Comment
,DocumentType
-
DocumentFragment
--Element
,ProcessingInstruction
,Comment
,Text
,CDATASection
,EntityReference
-
DocumentType
-- no children -
EntityReference
--Element
,ProcessingInstruction
,Comment
,Text
,CDATASection
,EntityReference
-
Element
--Element
,Text
,Comment
,ProcessingInstruction
,CDATASection
,EntityReference
-
Attr
--Text
,EntityReference
-
ProcessingInstruction
-- no children -
Comment
-- no children -
Text
-- no children -
CDATASection
-- no children -
Entity
--Element
,ProcessingInstruction
,Comment
,Text
,CDATASection
,EntityReference
-
Notation
-- no children
The XML Infoset (used by XPath) has a smaller set of nodes:
XPath has the following Node types:
- root nodes
- element nodes
- text nodes
- attribute nodes
- namespace nodes
- processing instruction nodes
- comment nodes
The answer to your question "What is the difference between an element and a node" is:
An element is a type of node. Many other types of nodes exist and serve different purposes.
A Node is a part of the DOM tree, an Element is a particular type of Node
e.g.
<foo> This is Text </foo>
You have a foo Element, (which is also a Node, as Element inherits from Node) and a Text Node 'This is Text', that is a child of the foo Element/Node