Да, это не так просто, как кажется на первый взгляд.
XSD различия:
Прежде всего, это зависит от вашего типа данных. Если вы используете определение схемы XSD, которое определяет типы ваших элементов, то <element></element>
может фактически использоваться только для строковых типов . Потому что это то, что на самом деле является пустым строковым значением: ""
.
Поэтому нельзя использовать <element></element>
для целого числа, тогда как <element/>
применимо для всех простых типов.
Различия JAXB:
JAXB (Java XML Binding) имеет подобные причуды. Было бы отображено <element/>
как различных значений в зависимости от целевого типа данных :
- для строки, это будет ""
- для целых чисел, это будет 0.
- для других типов, он просто пропустил бы это.
Вы могли бы подумать, что <element/>
разрешит значение null
. Но вам на самом деле нужно использовать <element xsi:nil="true"/>
для этого. Что я никогда не видел на практике.
HTML:
В HTML всегда есть третий вариант <element>
без закрывающего тега . Я не знаю как вы, но несколько раз в день я должен напоминать себе, что HTML - это не только XML. И это на самом деле означает, что <br>
и <br/>
не одно и то же. Вы не должны использовать <br/>
в HTML, и вы не должны использовать <br>
в XHTML.
Угловой 2 +:
Но то, что я действительно хотел получить, продолжая в последнем утверждении, если вы используете фреймворки, такие как Angular2 +, есть еще одна вещь, которую нужно иметь в виду.
Не вдаваясь в подробности, Angular заменяет пользовательские теги HTML шаблонами HTML, которые связаны с компонентами. Однако поддерживает только формат <element></element>
. Вам не разрешено использовать формат <element/>
.
Я лично стараюсь избегать синтаксиса <element/>
, потому что у него есть весь потенциал, чтобы что-то пошло не так. (= плохой аджи ).