В чем разница между элементом и узлом в XML?

370

Я работаю в Java с XML и мне интересно; В чем разница между элементом и узлом?

Филип Мортон
источник
7
Конечно, посмотрите на w3c . Модель данных легко понять - даже для меня!
xtofl
15
Отличный комментарий от forums.asp.net/t/443912.aspx/1#443940 : Так же, как между фруктами и яблоками. Каждый XmlElement является XmlNode, но не каждый XmlNode является XmlElement. XmlElement - это всего лишь один из видов XmlNode. Другие XmlAttribute, XmlText и т. Д.
atconway
2
Элемент является частью формального определения правильно сформированного документа XML, тогда как узел определяется как часть объектной модели документа для обработки документов XML.
Jool

Ответы:

259

Объект Node является основным типом данных для всего DOM.

Узлом может быть узел элемента, узел атрибута, текстовый узел или любой другой из типов узлов, описанных в главе «Типы узлов».

Элемент XML - это все от (включая) начальный тег элемента до (включая) конечный тег элемента.

Benoit
источник
122
Теперь, когда я понимаю ответ ... Конвенция глупа. Слова должны быть наоборот. В естественном английском языке «элемент» - это то, что является основным строительным блоком, из которого строится все остальное. то есть элемент в естественном английском языке является более общим ...
Сэм Свенбьоргхристиансенсен,
11
@Juan Mendes: Это то, что они согласно DOM, но Сэм считает, что DOM считает узлы более базовыми (примитивными), чем элементы, когда «элемент» на самом деле относится к основному строительному блоку на английском языке.
BoltClock
16
@SamSvenbjorgchristiensensen это не совсем точно. Элементы могут быть разбиты далее на «составные части», такие как протоны, нейтроны и электроны, которые, в свою очередь, могут быть разбиты на кварки, нейтрино и т. Д. Лучше понять, что означает «узел» в теории графов , и тогда вы понять, почему разработчики XML выбрали это имя (DOM - это просто иерархический граф).
Les Hazlewood
20
@LesHazlewood На самом деле, слово «элемент» использовалось для описания физических элементов (водород, гелий и т. Д.), Потому что они действительно думали, что эти вещи неделимы. Лишь намного позже они узнали, что они не правы - слишком поздно, чтобы сменить имя; Я согласен с Сэмом, то, как они называли и отличали элементы dom от узлов, сбивает с толку и плохо продумано (как и большая часть спецификации html).
BT
3
@BT ваш аргумент выдержал бы, если бы спецификационный XML-комитет жил в древней Греции :) Нет, и поэтому современное (словарное) определение элемента, который (ясно) представляет составные части, имеет смысл. Добавьте это к знаниям теории графов об узлах, и на самом деле не так много места для интерпретации.
Les Hazlewood
68

Различные спецификации W3C определяют разные наборы типов «Узлов».

Таким образом, спецификация DOM определяет следующие типы узлов:

  • Document- Element(максимум один), ProcessingInstruction, Comment,DocumentType
  • DocumentFragment - Element, ProcessingInstruction, Comment, Text, CDATASection,EntityReference
  • DocumentType -- нет детей
  • EntityReference - Element, ProcessingInstruction, Comment, Text, CDATASection,EntityReference
  • Element- Element, Text, Comment, ProcessingInstruction, CDATASection,EntityReference
  • Attr- Text,EntityReference
  • ProcessingInstruction -- нет детей
  • Comment -- нет детей
  • Text -- нет детей
  • CDATASection -- нет детей
  • Entity- Element, ProcessingInstruction, Comment, Text, CDATASection,EntityReference
  • Notation -- нет детей

XML Infoset (используется XPath) имеет меньший набор узлов:

  • Информационный элемент документа
  • Элементы информации об элементах
  • Элементы информации об атрибутах
  • Обработка информационных элементов инструкции
  • Нераспространенные элементы справочной информации
  • Информационные объекты персонажей
  • Информационные элементы комментариев
  • Информационный элемент декларации типа документа
  • Необработанные информационные объекты
  • Нотация информационных элементов
  • Информационные элементы пространства имен
  • XPath имеет следующие типы узлов:

    • корневые узлы
    • узлы элементов
    • текстовые узлы
    • атрибутивные узлы
    • узлы пространства имен
    • узлы инструкций по обработке
    • узлы комментариев

    Ответ на ваш вопрос «В чем разница между элементом и узлом »:

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

    Димитр Новатчев
    источник
    29

    Узел является частью дерева DOM, Элемент - это особый тип узла

    например <foo> This is Text </foo>

    У вас есть элемент foo (который также является узлом, так как элемент наследуется от узла) и текстовый узел «Это текст», который является дочерним элементом элемента / узла foo

    mmaibaum
    источник
    7
    Этот короткий пример дает мне больше понимания, чем выбранный ответ.
    KMC
    27

    Узлом может быть множество разных видов вещей: некоторый текст, комментарий, элемент, объект и т. Д. Элемент - это особый вид узла.

    Грег Хьюгилл
    источник
    15

    Как описано в различных спецификациях XML , это elementто, что состоит из начального тега и конечного тега, а также содержимого между ними или, альтернативно, пустого тега элемента (который не имеет содержимого или конечного тега). Другими словами, это все элементы:

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

    Хотя вы слышите, что «узел» используется примерно с таким же значением, у него нет точного определения для спецификаций XML. Обычно он используется для ссылки на узлы таких вещей, как DOM, которые могут быть тесно связаны с XML или использовать XML для их представления.

    fenomas
    источник
    11

    XML-документ состоит из вложенных элементов. Элемент начинается с открывающего тега и заканчивается закрывающим тегом . Вы, наверное, видели <body>и </body>в html. Все, что находится между открывающим и закрывающим тегами, является содержимым элемента . Если элемент определяется самозакрывающимся тегом (например, <br/>), то его содержимое пусто.

    Открывающие теги могут также указывать атрибуты , например. <p class="rant">, В этом примере имя атрибута равно «class», а его значение - «rant».

    В языке XML нет такой вещи, как «узел» . Прочитайте спецификацию , слово не встречается.

    Некоторые люди неофициально используют слово «узел» для обозначения элемента, что вводит в заблуждение, потому что некоторые анализаторы также придают слову техническое значение (идентифицируя «текстовые узлы» и «узлы элементов»). Точное значение зависит от синтаксического анализатора, поэтому слово не определено, если вы не укажете, какой анализатор вы используете. Если вы имеете в виду элемент, скажите «элемент» .

    Полковник паника
    источник
    Слово действительно встречается: «(т. Е. Каждый листовой узел в синтаксическом дереве для регулярного выражения)». Это в ненормативном приложении, но тем не менее это происходит. Там термин используется как узел в дереве разбора.
    скайкинг
    Даже если учесть, что в определении XML не упоминаются узлы, объектная модель документа (DOM), определенная для программной интерпретации и манипулирования XML (одной и той же организацией по стандартам), действительно определяет и использует термин «узел». Этот ответ не помогает дифференцировать термины и не помогает просто игнорировать различные варианты использования, утверждая, что они означают одно и то же.
    С Перкинс
    9

    Узел является базовым классом как для элементов, так и для атрибутов (и в основном для всех других представлений XML).

    Троэльс Томсен
    источник
    7

    Элемент - единственный вид узла, который может иметь дочерние узлы и атрибуты.

    Документ также имеет дочерние узлы, НО
    без атрибутов, без текста, ровно один дочерний элемент.

    eugensk
    источник
    2

    Узел определяется как:

    наименьшая единица допустимой, полной структуры в документе.

    или как:

    Объект в древовидном представлении, который служит контейнером для хранения связанных объектов.

    В настоящее время существует множество различных видов узлов, таких как узел элементов, узел атрибутов и т. Д.

    Роберт Роша
    источник
    1

    Теперь я знаю, что элемент является одним из узлов

    Все типы узлов здесь " http://www.w3schools.com/dom/dom_nodetype.asp "

    Элемент находится между начальным тегом и конечным в конечном теге

    Таким образом, текстовый узел является узлом, но не элементом.


    источник
    0

    Элемент - это тип узла, как атрибуты, текст и т. Д.

    Саймон Креп
    источник
    -3

    Элемент XML является узлом XML, но с дополнительными элементами, такими как атрибуты.

    <a>Lorem Ipsum</a>  //This is a node
    
    <a id="sample">Lorem Ipsum</a>  //This is an element
    Сабик Хан
    источник
    Я не думаю, что у вас есть источник для этого требования? Например, стандарт XML определяет термин «элемент», являющийся либо пустым тегом элемента, либо всем, начиная от начального тега и заканчивая конечным тегом. Начальный тег и пустой тег элемента не должны иметь никаких элементов. Оба ваших примера являются элементами. Термин «узел» определен в другом месте, в DOM, который относится к объектной модели, а не к самому тексту.
    скайкинг
    -7

    узел и элемент одинаковы. Каждый элемент является узлом, но не каждый узел должен быть элементом.

    Purna
    источник
    9
    Поскольку «не каждый узел должен быть элементом», утверждение «узел и элемент одинаковы» неверно.
    glglgl
    1
    Кроме того, ваше описание неверно, оно не очень полезно. Единственное, в чем вы правы, так это в том, что между терминами есть некоторая разница, но вопрос в том, какая разница.
    скайкинг