Форматы данных

Атрибуты и элементы XML: различия и когда что использовать

Атрибуты описывают элемент внутри его начального тега; дочерние элементы участвуют в дереве документа и могут содержать собственную структуру. Правильный выбор зависит от контракта словаря, а не от универсального правила стиля.

Опубликовано

Синтаксис атрибутов и элементов

Оба документа могут передавать одно бизнес-значение, но их XML-структуры различаются, и универсальный конвертер не должен молча скрывать эту разницу.

Attribute: <user id="42"><name>Ada</name></user>
Element:   <user><id>42</id><name>Ada</name></user>

Структурные различия

ВозможностьАтрибутДочерний элемент
ПовторениеОдин атрибут с данным именем на элементСоседние элементы могут повторяться
ПорядокПорядок атрибутов не несёт смыслаПорядок дочерних элементов является частью документа
Вложенная структураТолько текстовое значениеМожет содержать элементы и текст
Пустое или отсутствующее состояниеОтсутствует или присутствует со значениемМожет отсутствовать, быть пустым или содержать структуру

Когда атрибуты подходят

  • Стабильные идентификаторы, флаги или метки, относящиеся к одному элементу.
  • Компактные метаданные, которые не должны повторяться или содержать структуру.
  • Значения, определённые как атрибуты существующим XML-словарём или схемой.

Когда элементы подходят лучше

  • Значения, которые могут повторяться или порядок которых важен.
  • Содержимое, которое может получить вложенную структуру, разметку или языковые варианты.
  • Основные бизнес-данные, которым полезно единообразное древовидное представление.

Как атрибуты и элементы отображаются в JSON

Конвертеру нужно явное соглашение для атрибутов, поскольку в JSON нет собственного типа атрибута. Группировка в @attributes сохраняет различие и уменьшает риск конфликтов ключей.

XML:  <user id="42"><name>Ada</name></user>
JSON: { "user": { "@attributes": { "id": "42" }, "name": "Ada" } }

Проверьте пример

Сравните атрибут и дочерний элемент

Два значения id намеренно представлены разными XML-структурами.

<users><user id="42"><name>Ada</name></user><user><id>43</id><name>Lin</name></user></users>

Ожидаемый результат: Первый id находится в @attributes, а второй id остаётся дочерним значением.

Сравните отображение

Посмотрите атрибуты и элементы в JSON

Загрузите одно значение как атрибут и как дочерний элемент, затем изучите итоговую структуру JSON.

Перейти в XML to JSON Converter →