Форматы данных
Атрибуты и элементы 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.