Рекомендации по XML: атрибуты и дополнительные элементы
Какая разница между двумя и когда я должен использовать каждый:
<person>
<firstname>Joe</firstname>
<lastname>Plumber</lastname>
</person>
против
<person firstname="Joe" lastname="Plumber" />
Спасибо
Ответы
Ответ 1
В вашем примере есть центрированный элемент и атрибут XML, первый - элементный, второй -
атрибут.
В большинстве случаев эти два шаблона эквивалентны, однако есть некоторые исключения.
Атрибут в центре
- Меньший размер, чем элемент.
- Не очень интероперабельна, так как большинство парсеров XML будут думать, что пользовательские данные представлены элементом, Атрибуты используются для описания элемента.
- Невозможно представить значение NULL для некоторого типа данных. например nullable int
- Невозможно выразить сложный тип.
Элемент в центре
- Сложный тип может быть представлен только как элемент node.
- Очень совместимый
- Больший размер, чем атрибут. (сжатие может быть использовано для значительного исключения размера).
- Неверные данные могут быть выражены с помощью атрибута xsi: nil = "true"
- Быстрее для синтаксического анализа, поскольку парсер ищет элементы для пользовательских данных.
Практическая
Если вам действительно нужен размер XML, используйте атрибут каждый раз, когда это возможно, оставьте нулевой, сложный тип и node, который будет содержать большое текстовое значение в качестве элементов. Если вам все равно размер XML или у вас есть возможность сжатия во время трансакции, придерживаться элементов. Это более расширяемо.
Фон
В DOT NET XmlSerializer может сериализовать свойства объектов в атрибуты или элементы.
В недавней среде WCF DataContract serializer может только сериализовать свойства в элементах и быстрее, чем XmlSerializer, причина очевидна, ему просто нужно искать пользовательские данные из элементов при десериализации.
Здесь также объясняется статья
Элемент vs атрибут
Ответ 2
Когда-нибудь в будущем, когда вы добавите свойство <address>
, вы не захотите сделать его атрибутом XML. Это связано с тем, что <address>
может быть более сложным элементом, состоящим из уличного адреса, города, страны и т.д.
По этой причине вам может понадобиться выбрать первую форму подэлемента, если вы действительно не уверены, что атрибут не должен идти намного глубже. Первая форма обеспечивает большую расширяемость в будущем.
Если вы вообще обеспокоены пространством, сжимайте свой XML.
Ответ 3
В моей компании мы предпочли бы второй подход.
Мы думаем, что "firstname" и "lastname" являются атрибутами "person" node, а не подполями "person" node. Это тонкая разница.
По моему мнению, второй подход более краткий, а читаемость/ремонтопригодность значительно улучшена, что очень важно.
Конечно, это будет зависеть от вашего приложения. Я не думаю, что существует общее правило, которое охватывает все сценарии.
Ответ 4
Вы также можете увидеть ответы на этот вопрос, который я задал некоторое время назад. Я нашел ответы полезными.
Ответ 5
Атрибуты не чувствительны к порядку. Это может быть преимуществом или недостатком в зависимости от вашей ситуации.
Атрибуты не могут быть дублированы. Если "Джо" имеет два первых имени, то узлы - единственный способ пойти.
Ответ 6
Я нашел следующую информацию, очень полезную для объяснения выбора атрибутов vs элементов коротким способом
Некоторые проблемы с использованием атрибутов:
атрибуты не могут содержать несколько значений (элементы могут)
атрибуты не могут содержать древовидные структуры (элементы могут)
атрибуты не просто расширяемы (для будущих изменений)
Атрибуты трудно читать и поддерживать. Используйте элементы для данных. Используйте атрибуты для информации, не относящейся к данным.
источник: http://www.w3schools.com/xml/xml_attributes.asp