Jaka jest różnica między elementem a węzłem w XML?

370

Pracuję w Javie z XML-em i zastanawiam się; jaka jest różnica między elementem a węzłem?

Philip Morton
źródło
7
Na pewno spójrz na w3c . Model danych jest łatwy do zrozumienia - nawet dla mnie!
xtofl,
15
Świetny komentarz z forums.asp.net/t/443912.aspx/1#443940 : Taki sam jak między owocami a jabłkami. Każdy XmlElement to XmlNode, ale nie każdy XmlNode to XmlElement. XmlElement jest tylko jednym rodzajem XmlNode. Inne to XmlAttribute, XmlText itp.
atconway
2
Element jest częścią formalnej definicji poprawnie sformułowanego dokumentu XML, natomiast węzeł jest zdefiniowany jako część modelu obiektowego dokumentu do przetwarzania dokumentów XML.
Jool

Odpowiedzi:

259

Obiekt Node jest podstawowym typem danych dla całego DOM.

Węzeł może być węzłem elementu, węzłem atrybutu, węzłem tekstowym lub dowolnym innym typem węzła wyjaśnionym w rozdziale „Typy węzłów”.

Element XML to wszystko, od (włącznie) znacznika początkowego elementu do (włącznie) znacznika końcowego elementu.

Benoit
źródło
122
Teraz, gdy rozumiem odpowiedź ... Konwencja jest głupia. Słowa powinny być odwrotnie. W naturalnym języku angielskim „element” jest najbardziej podstawowym elementem składowym, z którego zbudowane jest wszystko inne. tzn. element w naturalnym języku angielskim jest bardziej ogólny ...
Sam Svenbjorgchristiensensen
11
@Juan Mendes: Właśnie takie są według DOM, ale Sam ma na myśli, że DOM uważa, że ​​węzły są bardziej podstawowe (prymitywne) niż elementy, kiedy „element” w rzeczywistości odnosi się do najbardziej podstawowego elementu konstrukcyjnego w języku angielskim.
BoltClock
16
@SamSvenbjorgchristiensensen, który nie jest całkiem dokładny. Elementy można dalej podzielić na „części składowe”, takie jak protony, neutrony i elektrony, które z kolei można rozbić na kwarki, neutrina itp. Lepiej zrozumieć, co „węzeł” oznacza w teorii grafów , a wtedy zrozumieć, dlaczego projektanci XML wybrali tę nazwę (DOM to tylko wykres hierarchiczny).
Les Hazlewood
20
@LesHazlewood Właściwie słowo „pierwiastek” został użyty do opisania elementów fizycznych (wodór, hel, etc), ponieważ zrobił , że te rzeczy były niepodzielne. Dopiero znacznie później odkryli, że się mylili - zdecydowanie za późno, by zmienić nazwę; ) Zgadzam się z Samem, że sposób, w jaki nazywali i różnicowali elementy dom vs węzły, jest mylący i źle przemyślany (tyle, ile jest specyfikacji html).
BT
3
@BT twój argument byłby nie do zniesienia, gdyby komitet specyfikacji XML żył w starożytnej Grecji :) Nie były i jako takie, nowoczesna (słownikowa) definicja elementu, który (wyraźnie) reprezentuje części składowe, ma sens. Dodaj do tego znajomość węzłów w teorii grafów i naprawdę nie ma zbyt wiele miejsca na interpretację.
Les Hazlewood,
68

Różne specyfikacje W3C definiują różne zestawy typów „Węzłów”.

Zatem specyfikacja DOM definiuje następujące typy węzłów:

  • Document- Element(maksymalnie jeden) ProcessingInstruction, Comment,DocumentType
  • DocumentFragment - Element, ProcessingInstruction, Comment, Text, CDATASection,EntityReference
  • DocumentType -- bez dzieci
  • EntityReference - Element, ProcessingInstruction, Comment, Text, CDATASection,EntityReference
  • Element - Element , Text, Comment, ProcessingInstruction, CDATASection,EntityReference
  • Attr- Text,EntityReference
  • ProcessingInstruction -- bez dzieci
  • Comment -- bez dzieci
  • Text -- bez dzieci
  • CDATASection -- bez dzieci
  • Entity- Element, ProcessingInstruction, Comment, Text, CDATASection,EntityReference
  • Notation -- bez dzieci

XML Infoset (używany przez XPath) ma mniejszy zbiór węzłów:

  • Pozycja informacji o dokumencie
  • Elementy informacji o elementach
  • Informacje o atrybutach
  • Przetwarzanie elementów informacji o instrukcjach
  • Elementy informacji odniesienia dla nierozwiniętej jednostki
  • Informacje o postaciach
  • Informacje o komentarzach
  • Pozycja informacyjna deklaracji typu dokumentu
  • Nieprzetworzone elementy informacji o podmiocie
  • Informacje o notacji
  • Elementy informacji o przestrzeni nazw
  • XPath ma następujące typy węzłów:

    • węzły główne
    • węzły elementów
    • węzły tekstowe
    • węzły atrybutów
    • węzły przestrzeni nazw
    • przetwarzanie węzłów instrukcji
    • węzły komentarzy

    Odpowiedź na pytanieJaka jest różnica między elementem a węzłem ” to:

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

    Dimitre Novatchev
    źródło
    29

    Węzeł jest częścią drzewa DOM, Element jest szczególnym typem Węzła

    na przykład <foo> This is Text </foo>

    Masz element foo (który jest również węzłem, ponieważ element dziedziczy po węźle) i węzeł tekstowy „To jest tekst”, który jest dzieckiem elementu / węzła foo

    mmaibaum
    źródło
    7
    Ten krótki przykład daje mi więcej zrozumienia niż wybrana odpowiedź.
    KMC
    27

    Węzłem może być wiele różnych rzeczy: jakiś tekst, komentarz, element, byt itp. Element jest szczególnym rodzajem węzła.

    Greg Hewgill
    źródło
    15

    Jak opisano w różnych specyfikacjach XML , jest elementto taki, który składa się ze znacznika początkowego i znacznika końcowego oraz treści pomiędzy, lub na przemian pustego znacznika elementu (który nie ma treści ani znacznika końcowego). Innymi słowy, są to wszystkie elementy:

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

    Chociaż słyszysz, że „węzeł” ma mniej więcej takie samo znaczenie, nie ma precyzyjnej definicji dla specyfikacji XML. Zwykle odnosi się do węzłów rzeczy takich jak DOM, które mogą być ściśle powiązane z XML lub używać XML do ich reprezentacji.

    fenomy
    źródło
    11

    Dokument XML składa się z zagnieżdżonych elementów. Element zaczyna się od znacznika otwierającego, a kończy na znaczniku zamykającym . Pewnie widział <body>i </body>w html. Wszystko pomiędzy otwierania i zamykania znaczników jest element za treść . Jeśli element jest zdefiniowany przez samozamykający się tag (np.<br/> ), Wówczas jego zawartość jest pusta.

    Tagi otwierające mogą również określać atrybuty , np. <p class="rant">. W tym przykładzie nazwą atrybutu jest „klasa”, a jej wartość „rant”.

    Język XML nie ma czegoś takiego jak „węzeł” . Przeczytaj specyfikację , słowo nie występuje.

    Niektóre osoby używają słowa „węzeł” nieformalnie w celu oznaczenia elementu, co jest mylące, ponieważ niektóre parsery nadają temu słowu również znaczenie techniczne (identyfikując „węzły tekstowe” i „węzły elementów”). Dokładne znaczenie zależy od parsera, więc słowo jest źle zdefiniowane, chyba że podasz używany parser. Jeśli masz na myśli element, powiedz „element” .

    Pułkownik Panika
    źródło
    Słowo występuje: „(tzn. Każdy węzeł liścia w drzewie składni dla wyrażenia regularnego)”. Jest w nienormatywnym dodatku, ale jednak tak się dzieje. Tam termin jest używany jako węzeł w drzewie analizy.
    skyking
    Nawet jeśli ktoś uważa, że ​​definicja XML nie wspomina o węzłach, to Document Object Model (DOM) zdefiniowany do programowej interpretacji i manipulacji XML (przez tę samą organizację normalizacyjną) faktycznie definiuje i używa terminu „węzeł”. Ta odpowiedź nie pomaga w rozróżnieniu terminów i nie pomaga po prostu zignorować różnych zastosowań, twierdząc, że oznaczają to samo.
    C Perkins,
    9

    Węzeł jest klasą podstawową zarówno dla elementów, jak i atrybutów (i zasadniczo wszystkich innych reprezentacji XML).

    Troels Thomsen
    źródło
    7

    Element jest jedynym rodzajem węzła, który może mieć węzły potomne i atrybuty.

    Dokument ma również węzły potomne, ALE
    bez atrybutów, bez tekstu, dokładnie jeden element potomny.

    Eugeniusz
    źródło
    2

    Węzeł jest zdefiniowany jako:

    najmniejsza jednostka prawidłowej, kompletnej struktury w dokumencie.

    lub jako:

    Obiekt w widoku drzewa, który służy jako pojemnik do przechowywania powiązanych obiektów.

    Teraz istnieje wiele różnych rodzajów węzłów jako węzeł elementów, węzeł atrybutów itp.

    Robert Rocha
    źródło
    1

    Teraz wiem, że element jest jednym z węzłów

    Wszystkie typy węzłów tutaj „ http://www.w3schools.com/dom/dom_nodetype.asp

    Element znajduje się między znacznikiem początkowym a końcowym w znaczniku końcowym

    Węzeł tekstowy jest więc węzłem, ale nie elementem.


    źródło
    0

    Element jest rodzajem węzła, podobnie jak atrybuty, tekst itp.

    Simon Keep
    źródło
    -3

    Element XML jest węzłem XML, ale z dodatkowymi elementami, takimi jak atrybuty.

    <a>Lorem Ipsum</a>  //This is a node
    
    <a id="sample">Lorem Ipsum</a>  //This is an element
    Sabique A Khan
    źródło
    Nie zakładam, że masz jakieś źródło tego roszczenia? Na przykład standard XML definiuje termin „element” będący pustym znacznikiem elementu lub wszystkim, począwszy od znacznika początkowego do znacznika końcowego włącznie. Znacznik początkowy i pusty znacznik elementu nie muszą mieć żadnych elementów. Oba twoje przykłady są elementami. Termin „węzeł” jest zdefiniowany gdzie indziej, w DOM, który dotyczy modelu obiektowego, a nie samego tekstu.
    skyking
    -7

    węzeł i element są takie same. Każdy element jest węzłem, ale nie jest tak, że każdy węzeł musi być elementem.

    Purna
    źródło
    9
    Ponieważ „nie jest tak, że każdy węzeł musi być elementem”, twierdzenie „węzeł i element są takie same” jest błędne.
    glglgl
    1
    Poza tym twój opis jest błędny, nie jest też zbyt przydatny. Jedyną rzeczą, o której masz rację, jest to, że istnieje pewna różnica między terminami, ale pytanie brzmiało, jaka jest różnica.
    skyking