Рекомендации по XML: атрибуты против дополнительных элементов [дубликат]
этот вопрос уже есть ответ здесь:
- атрибут XML против элемента XML 20 ответов
в чем разница между ними и когда я должен использовать каждый:
<person>
<firstname>Joe</firstname>
<lastname>Plumber</lastname>
</person>
и
<person firstname="Joe" lastname="Plumber" />
спасибо
6 ответов:
есть элемент ориентированных и атрибутов XML с использованием, в вашем примере, первый элемент ориентированной, второй атрибут центрический.
большую часть времени, эти две схемы эквивалентны, однако есть некоторые исключения.
атрибут centric
- меньший размер, чем элемент центральный.
- не очень совместимый, так как большинство синтаксических анализаторов XML будут думать, что пользовательские данные представлены элементом, атрибуты используется для описания элемента.
- нет никакого способа, чтобы представить значение, допускающее значение null для некоторого типа данных. например, nullable int
- не может выразить сложный тип.
центрический элемент
- сложный тип может быть представлен только как узел элемента.
- очень совместимых
- больший размер, чем атрибут centric. (сжатие может быть использовано для устранения размера значительно)
- Nullable данные можно выразить с помощью атрибута xsi:nil= "true"
- быстрее разбирать, так как парсер ищет только элементы для пользовательских данных.
практические
Если вы действительно заботитесь о размере XML, используйте атрибут всякий раз, когда это возможно, если это уместно, оставьте nullable, сложный тип и узел, который будет содержать большое текстовое значение в качестве элементов, Если вам не нужен размер XML или у вас есть сжатие во время транспортировки, придерживайтесь элементов. Она более расширяема.
фон
в DOT NET XmlSerializer может сериализовать свойства объектов в атрибуты или элементы. В недавно созданной структуре WCF сериализатор DataContract может только сериализовать свойства в элементы, и это быстрее, чем XmlSerializer, причина очевидна, ему просто нужно искать пользовательские данные из элементов при десериализации.
Здесь статья объясняет также элемент против атрибут
когда-нибудь в будущем, когда вы добавляете
<address>
свойство, вы не хотите, чтобы сделать его атрибутом XML. Это потому что<address>
может быть более сложным элементом, состоящим из адреса улицы, города, страны и т. д.Если вы вообще беспокоитесь о пространстве, сжатие XML.
в моей компании мы бы предпочли 2-й подход.
Как мы думаем об этом, что "имя" и "фамилия" являются атрибуты узла "персона", а не поля "человек" узел. Это тонкая разница.
на мой взгляд, второй подход более лаконичен, а читаемость/ремонтопригодность значительно улучшена, что очень важно.
конечно, это будет зависеть от вашего приложения. Я не думайте, что есть общее правило, которое охватывает все сценарии.
вы также можете увидеть ответы этой вопрос я задал некоторое время назад. Я нашел ответы полезными.
атрибуты не чувствительны к порядку. Это может быть преимуществом или недостатком в зависимости от ситуации.
атрибуты не могут быть продублированы. Если у " Джо " есть два имени, то узлы-единственный способ пойти.
Я нашел следующую информацию очень полезной в объяснении выбора атрибутов против элементов в короткой моде
некоторые проблемы с использованием атрибутов:
атрибуты не могут содержать несколько значений (элементов)
атрибуты не могут содержать древовидные структуры (элементы могут)
атрибуты не легко расширяются (для будущих изменений)атрибуты трудно читать и поддерживать. Используйте элементы для данных. Использовать атрибуты для информации, которая не имеет отношения к данным.