<tag id="foo" />
Я заметил, что они работают с PHP SimpleXML.
Но все XML-примеры, которые я нашел в Интернете, закрывают их по-старому:
<tag id="foo"></tag>
Есть ли причина, по которой я должен использовать старый метод?
<tag id="foo" />
Я заметил, что они работают с PHP SimpleXML.
Но все XML-примеры, которые я нашел в Интернете, закрывают их по-старому:
<tag id="foo"></tag>
Есть ли причина, по которой я должен использовать старый метод?
См. спецификации W3C для XML и XHTML:
Это зависит от объявления типа элемента
Элемент без содержимого называется пустым. Представление пустого элемента является либо начальным тегом, за которым следует конечный тег, либо тег с пустым элементом.
но также
Теги с пустыми элементами могут использоваться для любого элемента, у которого нет содержимого, независимо от того, объявлено ли оно с помощью ключевого слова EMPTY. Для интероперабельности тег empty-element ДОЛЖЕН использоваться и ДОЛЖЕН использоваться только для элементов, объявленных EMPTY.
Это означает, что когда ваш DTD содержит что-то вроде
<!ELEMENT img EMPTY>
вы должны использовать
<img/>
если у вас нет оснований для использования
<img></img>
Обратите внимание, что СЛЕДУЕТ определено в RFC2119 как
Это слово или прилагательное "РЕКОМЕНДУЕТСЯ" означает, что там могут существовать обоснованные причины в определенных обстоятельствах, чтобы игнорировать конкретный пункт, но следует понимать все последствия и тщательно взвешивается перед выбором другого курса.
Если вы работаете с XML, который не имеет DTD или Schema, вы также можете влиять на то, как XML сериализуется с предопределенной константой libxml:
LIBXML_NOEMPTYTAG (целое число): развернуть пустые теги (например,
<br/>
до<br></br>
)
Но обратите внимание, что этот параметр в настоящее время доступен только в функциях DOMDocument::save
и DOMDocument::saveXML
, поэтому вы не можете использовать его с SimpleXml.
Если вы хотите использовать PHP xml parser, вы можете указать действия по стартовому тегу, тегу close или полному тегу. Основываясь на ваших пожеланиях, вы можете захотеть иметь действие специально для тега close.
В некоторых случаях необходимы отдельные теги open/close: в качестве примера я нашел, что <script> теги в HTML должны иметь отдельный открытый/закрытый, чтобы работать последовательно в некоторых браузерах. Отдельный open/close является немного более подробным, но стоит того, чтобы в этих случаях.
Они одинаковы для XML, но могут отличаться в зависимости от вашего использования. Например, в xhtml1.0 существует официальный список для тегов, разрешенных для самозакрывания. Пока вы держите свой doctype в правильном xhtml, вы должны быть в порядке. Проверьте этот вопрос в stackoverflow для более подробного объяснения.
Да, это не так просто, как кажется сначала.
Прежде всего, это зависит от вашего типа данных. Если вы используете определение схемы XSD, которое определяет типы ваших элементов, тогда <element></element>
может использоваться только для типов строк. Потому что, что это такое, на самом деле это пустая строка: ""
.
Поэтому для целого числа использовать <element></element>
запрещено, в то время как контраст <element/>
применим для всех простых типов.
JAXB (Java XML Binding) имеет аналогичные причуды. Он сопоставил бы <element/>
как разные значения в зависимости от типа целевых данных:
У вас может возникнуть соблазн подумать, что <element/>
решит null
значение. Но для этого вам действительно нужно использовать <element xsi:nil="true"/>
. Которых я никогда не видел на практике.
В HTML всегда есть третья опция <element>
без закрытия тега. Я не знаю о вас, но несколько раз в день, я должен напомнить себе, что HTML - это не просто XML. И это на самом деле означает, что <br>
и <br/>
не то же самое. Вы не должны использовать <br/>
в HTML, и вы не должны использовать <br>
в XHTML.
Но то, что я действительно хотел получить, продолжая последнее утверждение, если вы используете фреймворки, такие как Angular 2+, есть еще одна вещь, о которой нужно помнить.
Без большого погружения в деталях, Angular заменяет собственные HTML-теги HTML-шаблонами, которые связаны с компонентами. Однако он поддерживает только формат <element></element>
. Вам не разрешено использовать формат <element/>
.
Я лично стараюсь избегать синтаксиса <element/>
, потому что у него есть все возможное, чтобы все пошло не так. (= плохой ажи).
Это зависит от вашей среды и данных. В НЕКОТОРЫХ системах существует разница между пустой строкой и пустой строкой. То есть тип строки, который является "Nothing", сильно отличается от существующей строки, но содержит нулевые символы.
Они могут быть представлены в XML как:
null = "<mystring />"
empty = "<mystring></mystring>"
9 раз из 10, это не имеет особого значения, но бывают случаи, когда разница между данными и пустыми данными на самом деле очень значительна ( "Я еще не знаю", а "I" узнал, и он был пуст. ")