Was ist der Unterschied zwischen einem Element und einem Knoten in XML?

370

Ich arbeite in Java mit XML und frage mich; Was ist der Unterschied zwischen einem Element und einem Knoten?

Philip Morton
quelle
7
Schauen Sie sich doch mal w3c an . Das Datenmodell ist leicht zu verstehen - auch für mich!
xtofl
15
Toller Kommentar von forums.asp.net/t/443912.aspx/1#443940 : Das gleiche wie zwischen Obst und Apfel. Jedes XmlElement ist XmlNode, aber nicht jeder XmlNode ist XmlElement. XmlElement ist nur eine Art von XmlNode. Andere sind XmlAttribute, XmlText usw.
atconway
2
Ein Element ist Teil der formalen Definition eines wohlgeformten XML-Dokuments, während ein Knoten als Teil des Dokumentobjektmodells für die Verarbeitung von XML-Dokumenten definiert ist.
Jool

Antworten:

259

Das Node-Objekt ist der primäre Datentyp für das gesamte DOM.

Ein Knoten kann ein Elementknoten, ein Attributknoten, ein Textknoten oder ein anderer der im Kapitel "Knotentypen" erläuterten Knotentypen sein.

Ein XML-Element ist alles vom Start-Tag des Elements bis zum End-Tag des Elements.

Benoit
quelle
122
Jetzt, wo ich die Antwort verstehe ... Die Konvention ist dumm. Die Wörter sollten umgekehrt sein. In der natürlichen englischen Sprache ist ein "Element" der grundlegendste Baustein, aus dem alles andere aufgebaut ist. dh ein Element in natürlichem Englisch ist allgemeiner ...
Sam Svenbjorgchristiensensen
11
@ Juan Mendes: Das ist es, was sie laut DOM sind, aber Sams Punkt ist, dass das DOM Knoten grundlegender (primitiver) als Elemente betrachtet, wenn sich "Element" tatsächlich auf den grundlegendsten Baustein in Englisch bezieht.
BoltClock
16
@ SamSvenbjorgchristiensensen das ist nicht ganz richtig. Elemente können weiter in "Bestandteile" wie Protonen, Neutronen und Elektronen zerlegt werden, die wiederum in Quarks, Neutrinos usw. zerlegt werden können. Es ist besser zu verstehen, was ein "Knoten" in der Graphentheorie bedeutet , und dann werden Sie Verstehen Sie, warum die XML-Designer diesen Namen gewählt haben (das DOM ist nur ein hierarchisches Diagramm).
Les Hazlewood
20
@LesHazlewood war eigentlich das Wort „Element“ verwendet , um physikalische Elemente zu beschreiben (Wasserstoff, Helium, usw.) , weil sie taten diese Dinge waren unteilbar denken. Es war erst viel später, als sie herausfanden, dass sie falsch lagen - viel zu spät, um den Namen zu ändern; ) Ich stimme Sam zu, die Art und Weise, wie sie dom-Elemente und Knoten benannten und unterschieden, ist verwirrend und schlecht durchdacht (so viel von der HTML-Spezifikation ist).
BT
3
@BT Ihr Argument würde Wasser halten, wenn das XML-Spezifikationskomitee im antiken Griechenland leben würde :) Sie haben es nicht getan, und als solches ist die moderne (Wörterbuch-) Definition eines Elements, das (eindeutig) Bestandteile darstellt, sinnvoll. Fügen Sie das mit graphentheoretischem Wissen über Knoten hinzu, und es gibt wirklich nicht viel Raum für Interpretation.
Les Hazlewood
68

Unterschiedliche W3C-Spezifikationen definieren unterschiedliche Sätze von "Knotentypen".

Daher definiert die DOM-Spezifikation die folgenden Knotentypen:

  • Document- Element(maximal eins), ProcessingInstruction, Comment,DocumentType
  • DocumentFragment - Element, ProcessingInstruction, Comment, Text, CDATASection,EntityReference
  • DocumentType -- keine Kinder
  • EntityReference - Element, ProcessingInstruction, Comment, Text, CDATASection,EntityReference
  • Element - - Element , Text, Comment, ProcessingInstruction, CDATASection,EntityReference
  • Attr- Text,EntityReference
  • ProcessingInstruction -- keine Kinder
  • Comment -- keine Kinder
  • Text -- keine Kinder
  • CDATASection -- keine Kinder
  • Entity- Element, ProcessingInstruction, Comment, Text, CDATASection,EntityReference
  • Notation -- keine Kinder

Das XML-Infoset (von XPath verwendet) verfügt über eine kleinere Anzahl von Knoten:

  • Das Dokumentinformationselement
  • Elementinformationselemente
  • Attributinformationselemente
  • Verarbeiten von Anweisungsinformationselementen
  • Nicht erweiterte Entitätsreferenzinformationselemente
  • Zeicheninformationselemente
  • Kommentar Informationselemente
  • Das Informationselement zur Dokumenttypdeklaration
  • Nicht analysierte Entitätsinformationselemente
  • Notationsinformationselemente
  • Namespace-Informationselemente
  • XPath hat die folgenden Knotentypen:

    • Wurzelknoten
    • Elementknoten
    • Textknoten
    • Attributknoten
    • Namespace-Knoten
    • Verarbeitungsanweisungsknoten
    • Kommentarknoten

    Die Antwort auf Ihre Frage " Was ist der Unterschied zwischen einem Element und einem Knoten " lautet:

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

    Dimitre Novatchev
    quelle
    29

    Ein Knoten ist ein Teil des DOM-Baums, ein Element ist ein bestimmter Knotentyp

    z.B <foo> This is Text </foo>

    Sie haben ein foo-Element (das auch ein Knoten ist, wie es das Element vom Knoten erbt) und einen Textknoten 'Dies ist Text', der ein untergeordnetes Element des foo-Elements / Knotens ist

    mmaibaum
    quelle
    7
    Dieses kurze Beispiel gibt mir mehr Verständnis als die ausgewählte Antwort.
    KMC
    27

    Ein Knoten kann eine Reihe verschiedener Arten von Dingen sein: Text, ein Kommentar, ein Element, eine Entität usw. Ein Element ist eine bestimmte Art von Knoten.

    Greg Hewgill
    quelle
    15

    Wie in den verschiedenen XML- Spezifikationen beschrieben , elementbesteht a aus einem Start- und einem End-Tag sowie dem dazwischen liegenden Inhalt oder alternativ aus einem leeren Element-Tag (das keinen Inhalt oder kein End-Tag enthält). Mit anderen Worten, dies sind alles Elemente:

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

    Obwohl Sie hören, dass "Knoten" mit ungefähr derselben Bedeutung verwendet wird, gibt es keine genaue Definition gemäß XML-Spezifikationen. Es wird normalerweise verwendet, um auf Knoten von Dingen wie DOMs zu verweisen, die eng mit XML verbunden sein können, oder um XML für ihre Darstellung zu verwenden.

    Fenome
    quelle
    11

    Ein XML-Dokument besteht aus verschachtelten Elementen. Ein Element beginnt an seinem öffnenden Tag und endet an seinem schließenden Tag . Sie sind wahrscheinlich gesehen <body>und </body>in HTML. Alles zwischen dem öffnenden und dem schließenden Tag ist der Inhalt des Elements . Wenn ein Element durch ein selbstschließendes Tag (z. B. <br/>) definiert ist, ist sein Inhalt leer.

    Das Öffnen von Tags kann auch Attribute angeben , z. <p class="rant">. In diesem Beispiel ist das Attribut Name ist ‚Klasse‘ und dessen Wert ‚rant‘.

    Die XML-Sprache hat keinen "Knoten" . Lesen Sie die Spezifikation , das Wort kommt nicht vor.

    Einige Leute verwenden das Wort "Knoten" informell, um Element zu bedeuten, was verwirrend ist, da einige Parser dem Wort auch eine technische Bedeutung geben (Identifizierung von "Textknoten" und "Elementknoten"). Die genaue Bedeutung hängt vom Parser ab, daher ist das Wort schlecht definiert, es sei denn, Sie geben an, welchen Parser Sie verwenden. Wenn Sie Element meinen, sagen Sie "Element" .

    Oberst Panik
    quelle
    Das Wort kommt vor: "(dh jeder Blattknoten im Syntaxbaum für den regulären Ausdruck)". Es befindet sich in einem nicht normativen Anhang, kommt aber dennoch vor. Dort wird der Begriff als Knoten im Analysebaum verwendet.
    Skyking
    Selbst wenn man bedenkt, dass in der XML-Definition keine Knoten erwähnt werden, definiert und verwendet das für die programmatische Interpretation und Manipulation von XML (von derselben Standardorganisation) definierte Document Object Model (DOM) tatsächlich den Begriff "Knoten". Diese Antwort hilft nicht, die Begriffe zu unterscheiden, und es hilft nicht, die verschiedenen Verwendungen einfach zu ignorieren, indem behauptet wird, dass sie dasselbe bedeuten.
    C Perkins
    9

    Ein Knoten ist die Basisklasse für Elemente und Attribute (und im Grunde auch für alle anderen XML-Darstellungen).

    Troels Thomsen
    quelle
    7

    Element ist die einzige Art von Knoten , die untergeordnete Knoten und Attribute haben kann.

    Das Dokument hat auch untergeordnete Knoten, ABER
    keine Attribute, keinen Text, genau ein untergeordnetes Element.

    Eugensk
    quelle
    2

    Ein Knoten ist definiert als:

    die kleinste Einheit einer gültigen, vollständigen Struktur in einem Dokument.

    oder als:

    Ein Objekt in der Baumansicht, das als Container für verwandte Objekte dient.

    Nun gibt es viele verschiedene Arten von Knoten als Elementknoten, Attributknoten usw.

    Robert Rocha
    quelle
    1

    Jetzt weiß ich, das Element ist eines der Knoten

    Alle Knotentypen hier " http://www.w3schools.com/dom/dom_nodetype.asp "

    Das Element befindet sich zwischen dem Start-Tag und dem Ende im End-Tag

    Der Textknoten ist also ein Knoten, aber kein Element.


    quelle
    0

    Ein Element ist ein Knotentyp, ebenso wie Attribute, Text usw.

    Simon Keep
    quelle
    -3

    XML-Element ist ein XML-Knoten, jedoch mit zusätzlichen Elementen wie Attributen.

    <a>Lorem Ipsum</a>  //This is a node
    
    <a id="sample">Lorem Ipsum</a>  //This is an element
    Sabique A Khan
    quelle
    Ich nehme nicht an, dass Sie eine Quelle für diese Behauptung haben? Beispielsweise definiert der XML-Standard den Begriff "Element" entweder als leeres Element-Tag oder als alles von und einschließlich des Start-Tags bis einschließlich des End-Tags. Ein Start - Tag und leere Element - Tag ist nicht brauchen keine Elemente haben. Ihre beiden Beispiele sind Elemente. Der Begriff "Knoten" wird an anderer Stelle im DOM definiert, bei dem es sich um ein Objektmodell handelt und nicht im Text selbst.
    Skyking
    -7

    Knoten & Element sind gleich. Jedes Element ist ein Knoten, aber es ist nicht so, dass jeder Knoten ein Element sein muss.

    Purna
    quelle
    9
    Da "es ist nicht so, dass jeder Knoten ein Element sein muss", ist die Behauptung "Knoten und Element sind gleich" falsch.
    glglgl
    1
    Abgesehen davon, dass Ihre Beschreibung falsch ist, ist sie auch nicht sehr nützlich. Das einzige, worüber Sie Recht haben, ist, dass es einen Unterschied zwischen den Begriffen gibt, aber die Frage war, welchen Unterschied es gibt.
    Skyking