Лучшие практики XML: атрибуты по сравнению с дополнительными элементами [дубликат]

Хотя несколько датировано, Код Как и Pythonista: Idiomatic Python рекомендует join() по + в этом разделе . Как и PythonSpeedPerformanceTips в своем разделе в конкатенации строки со следующим отказом:

Точность этого раздела оспаривается относительно более позднего версии Python. В CPython 2.5 конкатенация строк довольно быстрая, хотя это может не совпадать с другими реализациями Python. См. ConcatenationTestCode для обсуждения.

blockquote>

77
задан John Saunders 28 June 2009 в 00:37
поделиться

5 ответов

Существует центральный элемент и приписывает центральный XML в Вашем примере, первый является центральным элементом, вторым является центральный атрибут.

Большую часть времени, эти два шаблона эквивалентны, однако существуют некоторые исключения.

Атрибут, центральный

  • Меньший размер, чем центральный элемент.
  • Не очень совместимый, так как большинство синтаксических анализаторов XML будет думать, что пользовательские данные представлены элементом, Атрибуты используются для описания элемента.
  • нет никакого способа представить nullable значение для некоторого типа данных. например, nullable интервал
  • не Может выразить составного типа.

Элемент, центральный

  • , Составной тип может быть только представлен как узел элемента.
  • Очень совместимый
  • Больший размер, чем центральный атрибут. (сжатие может привыкнуть к устраненному размер значительно)
  • , данные Nullable могут быть выражены атрибутом xsi:nil = "верный"
  • Быстрее для парсинга, так как синтаксический анализатор только ищет элементы для пользовательских данных.

Практичный

, Если Вы действительно заботитесь о размере XML, используйте атрибут каждый раз, когда Вы можете, если это является соответствующим, Оставляют nullable, составной тип и узел, который собирающийся содержать значение крупного текста как элементы, Если Вы не заботитесь о размере XML или у Вас есть сжатие, включают во время транспортировки, палки с элементами. Это более расширяемо.

Фон

В ТОЧЕЧНОЙ СЕТИ, XmlSerializer может сериализировать свойства объектов или в атрибуты или в элементы. В недавно платформе WCF, сериализатор DataContract может только сериализировать свойства в элементы, и это быстрее, чем XmlSerializer, причина очевидна, это просто должно искать пользовательские данные из элементов при десериализации.

Здесь статья объясняет его также Элемент по сравнению с атрибутом

72
ответ дан Ray Lu 24 November 2019 в 11:01
поделиться

Можно также хотеть видеть ответы на этот вопрос, который я поставил некоторое время назад. Я нашел ответы полезными.

3
ответ дан Community 3 July 2019 в 12:19
поделиться

В моей компании мы одобрили бы 2-й подход.

способ, которым мы думаем об этом, состоит в том, что "firstname" и "lastname" атрибуты из узла "человека", а не подполя из узла "человека". Это - тонкое различие.

, По-моему, 2-й подход более краток, и удобочитаемость/пригодность для обслуживания значительно улучшена, который очень важен.

, Конечно, это зависело бы от Вашего приложения. Я не думаю, что существует всеохватывающая норма, которая покрывает все сценарии.

4
ответ дан LeopardSkinPillBoxHat 24 November 2019 в 11:01
поделиться

Когда-то в будущем, когда Вы добавите <address> свойство, Вы не захотите делать его атрибутом XML. Это вызвано тем, что <address> мог бы быть более сложный элемент, составленный из конкретного адреса, города, страны, и т.д.

поэтому можно хотеть выбрать первую форму подэлемента, если Вы не действительно уверены, что атрибут не должен будет идти намного глубже. Первая форма допускает большую расширяемость в будущем.

, Если Вы вообще обеспокоены пространством, сожмите свой XML.

5
ответ дан Greg Hewgill 24 November 2019 в 11:01
поделиться

Атрибуты не являются чувствительным порядком. Это может быть преимуществом или недостатком в зависимости от Вашей ситуации.

Атрибуты не могут быть дублированы. Если у "Joe" есть два имени, то узлы являются единственным способом пойти.

2
ответ дан Andru Luvisi 24 November 2019 в 11:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: