Fermeture automatique des balises dans les fichiers XML
<tag id="foo" />
J'ai remarqué qu'ils fonctionnent avec PHP SimpleXML.
Mais XML tous les exemples que j'ai trouvé sur le web les fermer à l'ancienne:
<tag id="foo"></tag>
Est-il une raison pourquoi je devrais utiliser l'ancienne méthode?
- Autant que je sache, ils sont équivalents. La première méthode est un peu moins verbeux et vous permet d'économiser quelques caractères. Vous pouvez également voir parfois
<tag id="foo" xsi:nil="true"/>
- Je déteste que nil="true". Pour autant que je suis concerné,
<tag />
signifie vide. Et l'omission de l'élément complètement signifie NULL. C'est juste la météorisation garder l'étiquette et le marquant comme NULLE.
Vous devez vous connecter pour publier un commentaire.
Voir les spécifications du W3C pour le XML et XHTML:
Cela dépend du Type d'Élément de déclaration
mais aussi
Cela signifie que, lorsque votre DTD contient quelque chose comme
vous devrait utilisation
sauf si vous avez une bonne raison d'utiliser
Noter que DEVRAIT est défini dans RFC2119 comme
Si vous travaillez avec des fichiers XML qui ne dispose pas d'une DTD ou d'un Schéma, vous pouvez également influencer la façon dont le XML est sérialisé avec un prédéfinis libxml constante:
Mais notez que cette option est actuellement disponible dans les fonctions
DOMDocument::save
etDOMDocument::saveXML
, de sorte que vous ne pouvez pas l'utiliser avec SimpleXml.Lorsque vous voulez utiliser PHP analyseur xml, vous pouvez spécifier les actions sur une balise de début, balise de fermeture, ou une balise complète. En fonction de vos souhaits, vous pouvez avoir une action spécifiquement sur la balise de fermeture.
Dans certains cas, les séparer ouvrir/fermer les balises sont nécessaires: par exemple, j'ai trouvé que <script> balises HTML dans le besoin d'avoir séparé d'ouverture/fermeture de travailler de manière cohérente dans certains navigateurs. La séparer d'ouverture/fermeture sont un peu plus verbeux, mais il vaut dans ces instances.
<p />
même s'il travaille dans les principaux navigateurs (w3.org/TR/xhtml1/#C_3). HTML n'est cependant pas un dialecte de XML, c'est une extension de SGML. XML n'existe même pas comme un spec quand le HTML a été créé.Ils sont les mêmes pour le XML, mais peut être différent en fonction de votre utilisation. Par exemple, en xhtml1.0, il y a un liste officielle pour les balises autorisées pour la fermeture automatique. Aussi longtemps que vous gardez votre doctype correct xhtml, vous devriez être bien. Découvrez cette question de stackoverflow pour une explication plus détaillée.
Oui, ce n'est pas aussi simple qu'il y paraît au premier abord.
XSD différences:
Tout d'abord, cela dépend du type de données. Si vous utilisez une définition de schéma XSD, qui définit les types de vos éléments, puis
<element></element>
peut effectivement être utilisé uniquement pour les types de chaînes de. Parce que, qu'est ce que c'est, c'est en fait une valeur d'une chaîne vide:""
.À cet effet, il est illégal d'utiliser
<element></element>
pour un entier, alors que par contraste<element/>
est applicable pour tous les types simples.JAXB différences:
JAXB (Java, XML Binding) a les mêmes manies. Il serait carte
<element/>
comme des valeurs différentes en fonction du type de données cible:Vous pourriez être tenté de penser que
<element/>
permettrait de résoudre unnull
valeur. Mais vous avez réellement besoin d'utiliser<element xsi:nil="true"/>
pour que. Je n'ai jamais jamais vu dans la pratique.HTML:
En HTML il n'y a toujours que 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 juste du XML. Et que signifie en fait que<br>
et<br/>
ne sont pas la même chose. Vous ne devriez pas utiliser<br/>
en HTML, et vous ne devriez pas utiliser<br>
en XHTML.Angulaire 2+:
Mais ce que j'ai vraiment envie de faire, de continuer sur sa dernière déclaration, si vous utilisez des frameworks comme Angular2+ il y a une autre chose à garder à l'esprit.
Sans aller trop dans le détail, Angulaire remplace les balises HTML personnalisées avec du HTML des modèles qui sont liés à des composants. Cependant il ne supporte que le
<element></element>
format. Vous n'êtes pas autorisé à utiliser le<element/>
format.Personnellement, j'essaie d'éviter le
<element/>
syntaxe, car il a tout le potentiel pour faire les choses tournent mal. (= mauvais aji).Cela dépend de votre environnement, et de données. Dans CERTAINS systèmes, il y a une différence entre une chaîne nulle et une chaîne vide. C'est-à-dire, un type chaîne de caractères qui n'est "Rien" est très différente d'une chaîne qui existe réellement, mais qui contient des caractères nul.
Ils peuvent être représentés en XML:
9 fois sur 10, il ne veut pas faire un peu de différence, mais il ya des moments où la différence entre " pas de données et de données vide est en fait très important ("je ne sais pas, pas encore" ou "j'ai trouvé, et il était vide.")
<mystring />
il est représenté par l'inclusion de l'élément XML ou à l'aide de laxsi:nil="true"
attribut