Quelle est la différence entre un élément et un nœud en XML?

370

Je travaille en Java avec XML et je me demande; quelle est la différence entre un élément et un nœud?

Philip Morton
la source
7
Jetez un coup d'œil au w3c . Le modèle de données est facile à comprendre - même pour moi!
xtofl
15
Grand commentaire de forums.asp.net/t/443912.aspx/1#443940 : le même qu'entre le fruit et la pomme. Chaque XmlElement est XmlNode, mais tous les XmlNode ne sont pas XmlElement. XmlElement n'est qu'un type de XmlNode. D'autres sont XmlAttribute, XmlText etc.
atconway
2
Un élément fait partie de la définition formelle d'un document XML bien formé, tandis qu'un nœud est défini comme faisant partie du modèle d'objet de document pour le traitement des documents XML.
Jool

Réponses:

259

L'objet Node est le type de données principal pour l'ensemble du DOM.

Un nœud peut être un nœud d'élément, un nœud d'attribut, un nœud de texte ou tout autre type de nœud expliqué dans le chapitre "Types de nœud".

Un élément XML est tout, de (y compris) la balise de début de l'élément à (y compris) la balise de fin de l'élément.

Benoit
la source
122
Maintenant que je comprends la réponse ... La convention est stupide. Les mots devraient être l'inverse. Dans la langue anglaise naturelle, un «élément» est quelque chose qui est le bloc de construction le plus élémentaire, à partir duquel tout le reste est construit. c'est-à-dire qu'un élément de l'anglais naturel est plus général ...
Sam Svenbjorgchristiensensen
11
@Juan Mendes: C'est ce qu'ils sont selon le DOM, mais le point de Sam est que le DOM considère les nœuds plus basiques (primitifs) que les éléments, quand "élément" se réfère en fait au bloc de construction le plus basique en anglais.
BoltClock
16
@SamSvenbjorgchristiensensen ce n'est pas tout à fait exact. Les éléments peuvent être décomposés davantage en «parties constituantes» comme les protons, les neutrons et les électrons, qui à leur tour peuvent être décomposés en quarks, neutrinos, etc. Il est préférable de comprendre ce que signifie un «nœud» dans la théorie des graphes , puis comprendre pourquoi les concepteurs XML ont choisi ce nom (le DOM n'est qu'un graphe hiérarchique).
Les Hazlewood du
20
@LesHazlewood En fait, le mot « élément » a été utilisé pour décrire les éléments physiques (hydrogène, hélium, etc.) parce qu'ils ont fait penser ces choses étaient indivisibles. Ce n'est que beaucoup plus tard qu'ils ont découvert qu'ils avaient tort - beaucoup trop tard pour changer le nom; ) Je suis d'accord avec Sam, la façon dont ils ont nommé et différencié les éléments dom vs les nœuds est déroutante et mal pensée (comme la plupart des spécifications html).
BT
3
@BT votre argument serait valable si le comité des spécifications XML vivait dans la Grèce antique :) Ils ne l'ont pas fait, et en tant que tel, la définition moderne (dictionnaire) d'élément qui représente (clairement) les parties constituantes a du sens. Ajoutez cela avec la connaissance de la théorie des graphes des nœuds, et il n'y a vraiment pas beaucoup de place pour l'interprétation.
Les Hazlewood
68

Différentes spécifications du W3C définissent différents ensembles de types de "nœuds".

Ainsi, la spécification DOM définit les types de nœuds suivants:

  • Document- Element(maximum d'une), ProcessingInstruction, Comment,DocumentType
  • DocumentFragment - Element, ProcessingInstruction, Comment, Text, CDATASection,EntityReference
  • DocumentType -- pas d'enfants
  • EntityReference - Element, ProcessingInstruction, Comment, Text, CDATASection,EntityReference
  • Element- Element, Text, Comment, ProcessingInstruction, CDATASection,EntityReference
  • Attr- Text,EntityReference
  • ProcessingInstruction -- pas d'enfants
  • Comment -- pas d'enfants
  • Text -- pas d'enfants
  • CDATASection -- pas d'enfants
  • Entity- Element, ProcessingInstruction, Comment, Text, CDATASection,EntityReference
  • Notation -- pas d'enfants

L'ensemble d'informations XML (utilisé par XPath) possède un ensemble de nœuds plus petit:

  • L'élément d'information sur le document
  • Éléments d'information sur les éléments
  • Éléments d'information sur les attributs
  • Traitement des informations sur les instructions
  • Éléments d'information de référence d'entité non développée
  • Éléments d'information sur les personnages
  • Éléments d'information sur les commentaires
  • L'élément d'information Déclaration de type de document
  • Éléments d'information sur l'entité non analysés
  • Éléments d'information sur la notation
  • Éléments d'information de l'espace de noms
  • XPath a les types de nœuds suivants:

    • nœuds racine
    • noeuds d'élément
    • nœuds de texte
    • nœuds d'attribut
    • nœuds d'espace de noms
    • traitement des nœuds d'instruction
    • noeuds de commentaire

    La réponse à votre question " Quelle est la différence entre un élément et un nœud " est:

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

    Dimitre Novatchev
    la source
    29

    Un nœud est une partie de l'arborescence DOM, un élément est un type particulier de nœud

    par exemple <foo> This is Text </foo>

    Vous avez un élément foo, (qui est également un nœud, car l'élément hérite du nœud) et un nœud de texte 'This is Text', qui est un enfant de l'élément / nœud foo

    mmaibaum
    la source
    7
    Ce court exemple me donne plus de compréhension que la réponse choisie.
    KMC
    27

    Un nœud peut être un certain nombre de choses différentes: du texte, un commentaire, un élément, une entité, etc. Un élément est un type particulier de nœud.

    Greg Hewgill
    la source
    15

    Comme décrit dans les diverses spécifications XML , un elementest celui qui se compose d'une balise de début et d'une balise de fin, et le contenu entre les deux, ou alternativement une balise d'élément vide (qui n'a ni contenu ni balise de fin). En d'autres termes, ce sont tous des éléments:

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

    Bien que vous entendiez "nœud" utilisé avec à peu près la même signification, il n'a pas de définition précise selon les spécifications XML. Il est généralement utilisé pour faire référence à des nœuds d'éléments tels que les DOM, qui peuvent être étroitement liés à XML ou utiliser XML pour leur représentation.

    fenomas
    la source
    11

    Un document xml est composé d'éléments imbriqués. Un élément commence à sa balise d'ouverture et se termine à sa balise de fermeture . Vous êtes probablement vu <body>et </body>en html. Tout entre les balises d'ouverture et de fermeture est le contenu de l'élément . Si un élément est défini par une balise à fermeture automatique (par exemple <br/>), son contenu est vide.

    L'ouverture des balises peut également spécifier des attributs , par exemple. <p class="rant">. Dans cet exemple, le nom de l'attribut est 'class' et sa valeur 'rant'.

    Le langage XML n'a pas de «nœud» . Lisez la spécification , le mot ne se produit pas.

    Certaines personnes utilisent le mot «nœud» de manière informelle pour signifier élément, ce qui prête à confusion car certains analyseurs donnent également au mot une signification technique (identifiant «nœuds de texte» et «nœuds d'élément»). La signification exacte dépend de l'analyseur, donc le mot est mal défini à moins que vous n'indiquiez quel analyseur vous utilisez. Si vous voulez dire élément, dites «élément» .

    Colonel Panic
    la source
    Le mot apparaît: "(c'est-à-dire chaque nœud feuille dans l'arbre de syntaxe pour l'expression régulière)". C'est dans une annexe non normative, mais cela se produit néanmoins. Là, le terme est utilisé comme nœud dans l'arbre d'analyse.
    skyking
    Même si l'on considère que la définition XML ne mentionne pas les nœuds, le Document Object Model (DOM) défini pour l'interprétation programmatique et la manipulation de XML (par la même organisation de normalisation) définit et utilise en effet le terme "nœud". Cette réponse n'aide pas à différencier les termes et n'aide pas simplement à ignorer les divers usages en affirmant qu'ils signifient la même chose.
    C Perkins
    9

    Un nœud est la classe de base pour les éléments et les attributs (et fondamentalement toutes les autres représentations XML également).

    Troels Thomsen
    la source
    7

    L'élément est le seul type de nœud pouvant avoir des nœuds et des attributs enfants.

    Le document a également des nœuds enfants, MAIS
    aucun attribut, aucun texte, exactement un élément enfant.

    eugensk
    la source
    2

    Un nœud est défini comme:

    la plus petite unité d'une structure valide et complète dans un document.

    ou comme:

    Un objet dans l'arborescence qui sert de conteneur pour contenir des objets associés.

    Maintenant, il existe de nombreux types de nœuds différents en tant que nœud d'éléments, nœud d'attribut, etc.

    Robert Rocha
    la source
    1

    Maintenant je sais, l'élément est un nœud

    Tous les types de nœuds ici " http://www.w3schools.com/dom/dom_nodetype.asp "

    L'élément se situe entre la balise de début et la fin de la balise de fin

    Le nœud de texte est donc un nœud, mais pas un élément.


    la source
    0

    Un élément est un type de nœud, tout comme les attributs, le texte, etc.

    Simon Keep
    la source
    -3

    L'élément XML est un nœud XML mais avec des éléments supplémentaires comme des attributs.

    <a>Lorem Ipsum</a>  //This is a node
    
    <a id="sample">Lorem Ipsum</a>  //This is an element
    Sabique A Khan
    la source
    Je ne suppose pas que vous ayez une source pour cette réclamation? Par exemple, la norme XML définit le terme "élément" comme étant une balise d'élément vide ou tout ce qui va de la balise de début à la balise de fin et y compris. Une balise de début et une balise d'élément vide n'ont pas besoin d'avoir d'éléments. Vos deux exemples sont des éléments. Le terme "nœud" est défini ailleurs, dans DOM qui concerne un modèle objet et non dans le texte lui-même.
    skyking
    -7

    le nœud et l'élément sont identiques. Chaque élément est un nœud, mais ce n'est pas que chaque nœud doit être un élément.

    Purna
    la source
    9
    Comme "ce n'est pas que chaque nœud doit être un élément", l'affirmation "nœud et élément sont identiques" est fausse.
    glglgl
    1
    Outre que votre description est fausse, elle n'est pas très utile non plus. La seule chose sur laquelle vous avez raison, c'est qu'il y a une certaine différence entre les termes, mais la question était de savoir quelle différence il y a.
    skyking