web-dev-qa-db-fra.com

Balises à fermeture automatique dans les fichiers XML

<tag id="foo" />

J'ai remarqué qu'ils travaillent avec PHP SimpleXML.

Mais tous les exemples XML que j'ai trouvés sur le Web les ferment à l'ancienne:

<tag id="foo"></tag>

Y a-t-il une raison pour laquelle je devrais utiliser l'ancienne méthode?

22
Natasha

Lorsque vous voulez utiliser xml parser de PHP , vous pouvez spécifier des actions sur une balise de début, une balise de fermeture ou une balise complète. En fonction de vos souhaits, vous souhaiterez peut-être une action spécifique sur l’étiquette de fermeture.

2
y_a_v_a

Dans certains cas, des balises d'ouverture/fermeture distinctes sont nécessaires: à titre d'exemple, j'ai constaté que les balises <script> en HTML doivent avoir une ouverture/fermeture séparée pour fonctionner de manière constante dans certains navigateurs. Les ouverture/fermeture séparées sont un peu plus verbeuses mais en valent la peine.

1
Femi

Ils sont identiques pour XML, mais peuvent varier en fonction de votre utilisation. Par exemple, dans xhtml1.0, il existe une liste official pour les balises autorisées pour la fermeture automatique. Tant que vous gardez votre doctype sur le correct xhtml, ça devrait aller. Consultez cette question de stackoverflow pour une explication plus détaillée.

1
Lars

Oui, ce n'est pas aussi simple qu'il y paraît au premier abord.

Différences XSD:

Tout d'abord, cela dépend de votre type de données. Si vous utilisez une définition de schéma XSD, qui définit les types de vos éléments, alors <element></element>peut uniquement être utilisé pour les types de chaîne. Parce que, c'est ce que c'est, c'est en fait une valeur de chaîne vide: "".

Par conséquent, il est illégal d'utiliser <element></element> pour un entier, alors que <element/> est applicable à tous les types simples.

Différences JAXB:

JAXB (Java XML Binding) présente des défauts similaires. Cela mapperait <element/> comme différentes valeurs en fonction du type de données cible:

  • pour String, ce serait un ""
  • pour Integer, ce serait un 0.
  • pour les autres types, il suffit de le sauter.

Vous pourriez être tenté de penser que <element/> résoudrait en une valeur null. Mais vous devez utiliser <element xsi:nil="true"/> pour cela. Ce que je n'ai jamais vu dans la pratique.

HTML:

En HTML, il y a toujours cette troisième option de <element> sans balise de fermeture. Je ne sais pas pour vous, mais plusieurs fois par jour, je dois me rappeler que le HTML n'est pas seulement du XML. Et cela signifie en fait que <br> et <br/> ne sont pas la même chose. Vous ne devez pas utiliser <br/> en HTML, ni <br> en XHTML.

Angular 2+:

Mais ce que je voulais vraiment faire, en continuant avec la dernière déclaration, si vous utilisez des frameworks comme Angular2 +, vous devez garder à l'esprit un autre point. 

Sans trop entrer dans les détails, Angular remplace les balises HTML personnalisées par des modèles HTML liés à des composants. Cependant, il ne prend en charge que le format <element></element>. Vous n'êtes pas autorisé à utiliser le format <element/>.

Personnellement, j'essaie d'éviter la syntaxe <element/>, car elle a tout le potentiel de faire en sorte que les choses tournent mal. (= bad aji ).

0
bvdb