Qual é a diferença entre um elemento e um nó no XML?

370

Estou trabalhando em Java com XML e estou pensando; qual é a diferença entre um elemento e um nó?

Philip Morton
fonte
7
Claro, dê uma olhada no w3c . O modelo de dados é fácil de entender - mesmo para mim!
xtofl 25/09/08
15
Ótimo comentário de forums.asp.net/t/443912.aspx/1#443940 : O mesmo que entre frutas e maçãs. Todo XmlElement é XmlNode, mas nem todo XmlNode é XmlElement. XmlElement é apenas um tipo de XmlNode. Outros são XmlAttribute, XmlText etc.
atconway
2
Um elemento faz parte da definição formal de um documento XML bem formado, enquanto um nó é definido como parte do Modelo de Objeto do Documento para processar documentos XML.
Jool

Respostas:

259

O objeto Node é o tipo de dados principal para todo o DOM.

Um nó pode ser um nó de elemento, um nó de atributo, um nó de texto ou qualquer outro tipo de nó explicado no capítulo "Tipos de nós".

Um elemento XML é tudo, desde (incluindo) a marca inicial do elemento até (incluindo) a marca final do elemento.

Benoit
fonte
122
Agora que entendi a resposta ... A convenção é estúpida. As palavras devem ser o contrário. No idioma inglês natural, um 'elemento' é algo que é o bloco de construção mais básico, do qual tudo é construído. ou seja, um elemento em Inglês natural é mais geral ...
Sam Svenbjorgchristiensensen
11
@ Juan Mendes: Isso é o que eles estão de acordo com o DOM, mas o argumento de Sam é que o DOM considera os nós mais básicos (primitivos) que os elementos, quando "elemento" realmente se refere ao bloco de construção mais básico em inglês.
BoltClock
16
@SamSvenbjorgchristiensensen isso não é muito preciso. Os elementos podem ser divididos ainda mais em 'partes constituintes', como prótons, nêutrons e elétrons, que por sua vez podem ser divididos em quarks, neutrinos etc. É melhor entender o que um 'nó' significa na teoria dos grafos , e então você Entenda por que os designers de XML escolheram esse nome (o DOM é apenas um gráfico hierárquico).
Les Hazlewood
20
@LesHazlewood Na verdade, a palavra "elemento" foi usado para descrever elementos físicos (hidrogênio, hélio, etc), porque eles fizeram acho que essas coisas eram indivisíveis. Só muito depois descobriram que estavam errados - tarde demais para mudar o nome; ) Eu concordo com Sam, a maneira como eles nomearam e diferenciaram elementos dom vs nós é confusa e mal pensada (como é a maior parte da especificação html).
BT
3
@BT, seu argumento seria válido se o comitê de especificação XML vivesse na Grécia antiga :) Eles não entenderam e, como tal, a definição moderna (dicionário) de elemento que (claramente) representa partes constituintes faz sentido. Adicione isso ao conhecimento da teoria dos grafos sobre os nós, e realmente não há muito espaço para interpretação.
precisa
68

Diferentes especificações do W3C definem conjuntos diferentes de tipos de "Nó".

Portanto, a especificação DOM define os seguintes tipos de nós:

  • Document- Element(máximo de um), ProcessingInstruction, Comment,DocumentType
  • DocumentFragment - Element, ProcessingInstruction, Comment, Text, CDATASection,EntityReference
  • DocumentType - sem filhos
  • EntityReference - Element, ProcessingInstruction, Comment, Text, CDATASection,EntityReference
  • Element- Element, Text, Comment, ProcessingInstruction, CDATASection,EntityReference
  • Attr- Text,EntityReference
  • ProcessingInstruction - sem filhos
  • Comment - sem filhos
  • Text - sem filhos
  • CDATASection - sem filhos
  • Entity- Element, ProcessingInstruction, Comment, Text, CDATASection,EntityReference
  • Notation - sem filhos

O XML Infoset (usado pelo XPath) possui um conjunto menor de nós:

  • O item de informações do documento
  • Itens de informação do elemento
  • Itens de informações de atributo
  • Processando itens de informações de instruções
  • Itens de informações de referência de entidade não expandida
  • Itens de Informações do Personagem
  • Itens de informações de comentários
  • O item de informação da declaração do tipo de documento
  • Itens de informações da entidade não analisada
  • Itens de informações da notação
  • Itens de informações do espaço para nome
  • XPath possui os seguintes tipos de nós:

    • nós raiz
    • nós de elemento
    • nós de texto
    • nós de atributo
    • nós de namespace
    • nós de instruções de processamento
    • nós de comentário

    A resposta para sua pergunta " Qual é a diferença entre um elemento e um nó " é:

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

    Dimitre Novatchev
    fonte
    29

    Um Nó faz parte da árvore DOM, um Elemento é um tipo específico de Nó

    por exemplo <foo> This is Text </foo>

    Você tem um elemento foo (que também é um nó, como o elemento herda do nó) e um nó de texto 'This is Text', que é filho do elemento / nó foo

    mmaibaum
    fonte
    7
    Este pequeno exemplo me dá mais entendimento do que a resposta selecionada.
    KMC
    27

    Um nó pode ser um número de diferentes tipos de coisas: algum texto, um comentário, um elemento, uma entidade etc. Um elemento é um tipo específico de nó.

    Greg Hewgill
    fonte
    15

    Conforme descrito nas várias especificações XML , um elementé aquele que consiste em uma tag inicial e final e o conteúdo intermediário, ou alternativamente, em um elemento vazio (que não possui conteúdo ou final). Em outras palavras, estes são todos os elementos:

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

    Embora você ouça "nó" usado com aproximadamente o mesmo significado, ele não possui uma definição precisa por especificações XML. Geralmente é usado para se referir a nós, como DOMs, que podem estar intimamente relacionados ao XML ou usar XML para sua representação.

    fenomas
    fonte
    11

    Um documento xml é feito de elementos aninhados. Um elemento começa na tag de abertura e termina na tag de fechamento . Você provavelmente está visto <body>e </body>em html. Tudo entre as tags de abertura e fechamento é o conteúdo do elemento . Se um elemento for definido por uma tag de fechamento automático (por exemplo <br/>), seu conteúdo estará vazio.

    As tags de abertura também podem especificar atributos , por exemplo. <p class="rant">. Neste exemplo, o nome do atributo é 'class' e seu valor 'rant'.

    A linguagem XML não possui um 'nó' . Leia as especificações , a palavra não ocorre.

    Algumas pessoas usam a palavra 'nó' informalmente para significar elemento, o que é confuso porque alguns analisadores também atribuem à palavra um significado técnico (identificando 'nós de texto' e 'nós de elemento'). O significado exato depende do analisador; portanto, a palavra está mal definida, a menos que você indique qual analisador está usando. Se você quer dizer elemento, diga 'elemento' .

    Coronel Panic
    fonte
    A palavra ocorre: "(ou seja, cada nó da folha na árvore de sintaxe para a expressão regular)". Está em um apêndice não normativo, mas, no entanto, ocorre. Lá, o termo é usado como nó na árvore de análise.
    SkyKing
    Mesmo se considerarmos que a definição XML não menciona nós, o DOM (Document Object Model) definido para interpretação programática e manipulação de XML (pela mesma organização de padrões) de fato define e usa o termo "nó". Essa resposta não ajuda a diferenciar os termos e não ajuda a ignorar os vários usos, afirmando que eles significam a mesma coisa.
    C Perkins
    9

    Um nó é a classe base para elementos e atributos (e basicamente para todas as outras representações XML também).

    Troels Thomsen
    fonte
    7

    Elemento é o único tipo de que pode ter nós e atributos filhos.

    O documento também possui nós filhos, MAS
    sem atributos, sem texto, exatamente um elemento filho.

    eugensk
    fonte
    2

    Um nó é definido como:

    a menor unidade de uma estrutura completa válida em um documento.

    ou como:

    Um objeto na visualização em árvore que serve como um contêiner para armazenar objetos relacionados.

    Agora, existem muitos tipos diferentes de nós como um nó de elementos, um nó de atributo etc.

    Robert Rocha
    fonte
    1

    Agora eu sei, o elemento é um dos nós

    Todos os tipos de nós aqui " http://www.w3schools.com/dom/dom_nodetype.asp "

    O elemento está entre a tag inicial e o final na tag final

    Portanto, o nó de texto é um nó, mas não um elemento.


    fonte
    0

    Um elemento é um tipo de nó, assim como atributos, texto etc.

    Simon Keep
    fonte
    -3

    Elemento XML é um nó XML, mas com elementos adicionais, como atributos.

    <a>Lorem Ipsum</a>  //This is a node
    
    <a id="sample">Lorem Ipsum</a>  //This is an element
    Sabique A Khan
    fonte
    Não presumo que você tenha alguma fonte para esta reivindicação? Por exemplo, o padrão XML define o termo "elemento" como uma tag de elemento vazia ou tudo, incluindo a tag inicial e incluindo a tag final. Uma tag de início e uma tag de elemento vazio não precisam ter nenhum elemento. Ambos os seus exemplos são elementos. O termo "nó" é definido em outro lugar, no DOM, que é sobre um modelo de objeto e não no próprio texto.
    SkyKing
    -7

    nó e elemento são os mesmos. Todo elemento é um nó, mas não é que todo nó deva ser um elemento.

    Purna
    fonte
    9
    Como "não é que todo nó precise ser um elemento", a declaração "nó e elemento é o mesmo" está errada.
    glglgl
    11
    Além de sua descrição estar errada, também não é muito útil. A única coisa que você tem razão é que há alguma diferença entre os termos, mas a questão era qual a diferença.
    SkyKing