Qual è la differenza tra un elemento e un nodo in XML?


370

Sto lavorando in Java con XML e mi chiedo; qual è la differenza tra un elemento e un nodo?


7
Dai un'occhiata a w3c . Il modello di dati è facile da capire, anche per me!
xtofl,

15
Ottimo commento da forums.asp.net/t/443912.aspx/1#443940 : lo stesso tra frutta e mela. Ogni XmlElement è XmlNode, ma non ogni XmlNode è XmlElement. XmlElement è solo un tipo di XmlNode. Altri sono XmlAttribute, XmlText ecc.
atconway

2
Un elemento fa parte della definizione formale di un documento XML ben formato, mentre un nodo è definito come parte del Document Object Model per l'elaborazione di documenti XML.
Jool

Risposte:


259

L'oggetto Node è il tipo di dati primario per l'intero DOM.

Un nodo può essere un nodo elemento, un nodo attributo, un nodo di testo o qualsiasi altro tipo di nodo spiegato nel capitolo "Tipi di nodo".

Un elemento XML è tutto da (incluso) il tag iniziale dell'elemento a (compreso) il tag finale dell'elemento.


122
Ora che ho capito la risposta ... La convenzione è stupida. Le parole dovrebbero essere al contrario. Nella lingua inglese naturale un "elemento" è qualcosa che costituisce il blocco di base più elementare, dal quale viene costruito tutto il resto. cioè un elemento in inglese naturale è più generale ...
Sam Svenbjorgchristiensensen

11
@Juan Mendes: Questo è quello che sono secondo il DOM, ma il punto di Sam è che il DOM considera i nodi più elementari (primitivi) degli elementi, quando "element" si riferisce in realtà al blocco base più elementare in inglese.
BoltClock

16
@SamSvenbjorgchristiensensen non è del tutto esatto. Gli elementi possono essere ulteriormente scomposti in "parti costituenti" come protoni, neutroni ed elettroni, che a loro volta possono essere suddivisi in quark, neutrini, ecc. È meglio capire cosa significhi un "nodo" nella teoria dei grafi , quindi capire perché i progettisti XML hanno scelto quel nome (il DOM è solo un grafico gerarchico).
Les Hazlewood,

20
@LesHazlewood In realtà, la parola "elemento" è stato utilizzato per descrivere elementi fisici (idrogeno, elio, ecc) perché fatto che quelle cose erano indivisibili. Fu solo molto dopo che scoprirono che avevano torto - troppo tardi per cambiare il nome; ) Sono d'accordo con Sam, il modo in cui hanno chiamato e differenziato gli elementi dom rispetto ai nodi è confuso e scarsamente ponderato (come gran parte delle specifiche html è).
BT,

3
@BT il tuo argomento potrebbe trattenere l'acqua se il comitato delle specifiche XML vivesse nell'antica Grecia :) Non avevano, e come tale, la moderna definizione (dizionario) di elemento che (chiaramente) rappresenta parti costituenti ha senso. Aggiungilo con la conoscenza della teoria dei grafi dei nodi e non c'è davvero molto spazio per l'interpretazione.
Les Hazlewood,

68

Diverse specifiche del W3C definiscono diversi insiemi di tipi "Nodo".

Pertanto, le specifiche DOM definiscono i seguenti tipi di nodi:

  • Document- Element(massimo uno), ProcessingInstruction, Comment,DocumentType
  • DocumentFragment - Element, ProcessingInstruction, Comment, Text, CDATASection,EntityReference
  • DocumentType -- niente bambini
  • EntityReference - Element, ProcessingInstruction, Comment, Text, CDATASection,EntityReference
  • Element- Element, Text, Comment, ProcessingInstruction, CDATASection,EntityReference
  • Attr- Text,EntityReference
  • ProcessingInstruction -- niente bambini
  • Comment -- niente bambini
  • Text -- niente bambini
  • CDATASection -- niente bambini
  • Entity- Element, ProcessingInstruction, Comment, Text, CDATASection,EntityReference
  • Notation -- niente bambini

L' XML Infoset (usato da XPath) ha un insieme ridotto di nodi:

  • L'elemento informativo del documento
  • Elementi informativi sugli elementi
  • Voci di informazioni sugli attributi
  • Elaborazione di elementi informativi relativi alle istruzioni
  • Voci di informazioni di riferimento entità non espanse
  • Informazioni sul personaggio
  • Informazioni sui commenti
  • Voce informativa sulla dichiarazione del tipo di documento
  • Elementi informativi entità non analizzati
  • Elementi informativi sulla notazione
  • Elementi informativi dello spazio dei nomi
  • XPath ha i seguenti tipi di nodo:

    • nodi radice
    • nodi elemento
    • nodi di testo
    • nodi di attributo
    • nodi dello spazio dei nomi
    • elaborazione dei nodi delle istruzioni
    • nodi di commento

    La risposta alla tua domanda " Qual è la differenza tra un elemento e un nodo " è:

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


    29

    Un nodo fa parte della struttura DOM, un elemento è un tipo particolare di nodo

    per esempio <foo> This is Text </foo>

    Hai un elemento foo, (che è anche un nodo, come elemento eredita dal nodo) e un nodo di testo "Questo è testo", che è un figlio dell'elemento / nodo foo


    7
    Questo breve esempio mi dà più comprensione della risposta selezionata.
    KMC

    27

    Un nodo può essere un numero di diversi tipi di cose: un testo, un commento, un elemento, un'entità, ecc. Un elemento è un particolare tipo di nodo.


    15

    Come descritto nelle varie specifiche XML , un elementè quello che consiste in un tag iniziale e in un tag finale e il contenuto tra o in alternativa un tag elemento vuoto (che non ha contenuto o tag finale). In altre parole, questi sono tutti elementi:

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

    Sebbene tu senta "nodo" usato approssimativamente con lo stesso significato, non ha una definizione precisa per le specifiche XML. Di solito viene utilizzato per fare riferimento a nodi di cose come DOM, che possono essere strettamente correlati a XML o utilizzare XML per la loro rappresentazione.


    11

    Un documento xml è composto da elementi nidificati. Un elemento inizia nel suo tag di apertura e termina nel suo tag di chiusura . Probabilmente sei visto <body>e </body>in html. Tutto tra i tag di apertura e chiusura è il contenuto dell'elemento . Se un elemento è definito da un tag a chiusura automatica (ad es. <br/>), Il suo contenuto è vuoto.

    I tag di apertura possono anche specificare attributi , ad es. <p class="rant">. In questo esempio il nome dell'attributo è 'class' e il suo valore 'rant'.

    Il linguaggio XML non ha un "nodo" . Leggi le specifiche , la parola non compare.

    Alcune persone usano la parola "nodo" in modo informale per indicare l'elemento, il che è confuso perché alcuni parser danno anche alla parola un significato tecnico (identificando "nodi di testo" e "nodi di elementi"). Il significato esatto dipende dal parser, quindi la parola è mal definita a meno che non si dichiari quale parser si sta utilizzando. Se intendi elemento, pronuncia "elemento" .


    La parola si presenta: "(cioè ogni nodo foglia nella struttura della sintassi per l'espressione regolare)". È in un'appendice non normativa, ma tuttavia si verifica. Lì il termine è usato come nodo nella struttura di analisi.
    stelle il

    Anche se si considera che la definizione XML non menziona i nodi, il Document Object Model (DOM) definito per l'interpretazione e la manipolazione programmatica dell'XML (dalla stessa organizzazione standard) definisce e utilizza il termine "nodo". Questa risposta non aiuta a differenziare i termini e non aiuta a ignorare i vari usi affermando che significano la stessa cosa.
    C Perkins,

    9

    Un nodo è la classe di base sia per gli elementi che per gli attributi (e sostanzialmente anche per tutte le altre rappresentazioni XML).


    7

    L'elemento è l'unico tipo di nodo che può avere nodi e attributi figlio.

    Il documento ha anche nodi figlio, MA
    nessun attributo, nessun testo, esattamente un elemento figlio.


    2

    Un nodo è definito come:

    la più piccola unità di una struttura valida e completa in un documento.

    o come:

    Un oggetto nella vista ad albero che funge da contenitore per contenere oggetti correlati.

    Ora ci sono molti diversi tipi di nodi come nodo elementi, nodo attributo ecc.


    1

    Ora lo so, l'elemento è uno di nodo

    Tutti i tipi di nodo qui " http://www.w3schools.com/dom/dom_nodetype.asp "

    L'elemento si trova tra il tag di inizio e la fine nel tag di fine

    Quindi il nodo di testo è un nodo, ma non un elemento.


    0

    Un elemento è un tipo di nodo come lo sono attributi, testo ecc.


    -3

    XML Element è un nodo XML ma con elementi aggiuntivi come gli attributi.

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

    Non presumo che tu abbia qualche fonte per questa affermazione? Ad esempio, lo standard XML definisce il termine "elemento" come tag elemento vuoto o tutto, compreso il tag iniziale e incluso il tag finale. Un tag iniziale e un tag elemento vuoto non devono contenere alcun elemento. Entrambi i tuoi esempi sono elementi. Il termine "nodo" è definito altrove, in DOM che riguarda un modello a oggetti e non nel testo stesso.
    stelle il

    -7

    nodo ed elemento sono uguali. Ogni elemento è un nodo, ma non è che ogni nodo debba essere un elemento.


    9
    Poiché "non è che ogni nodo deve essere un elemento", l'affermazione "nodo ed elemento sono uguali" è errata.
    glglgl,

    1
    Inoltre la tua descrizione è sbagliata, non è nemmeno molto utile. L'unica cosa su cui hai ragione è che c'è una differenza tra i termini, ma la domanda era quale differenza ci fosse.
    stelle il
    Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
    Licensed under cc by-sa 3.0 with attribution required.