html - página - que ocurre si no se coloca la etiqueta de cierre respectiva
Etiquetas de cierre automático en archivos XML (6)
<tag id="foo" />
Noté que funcionan con PHP SimpleXML.
Pero todos los ejemplos XML que encontré en la web los cierran a la manera antigua:
<tag id="foo"></tag>
¿Hay alguna razón por la que debería usar el método antiguo?
Cuando desee utilizar el analizador xml de PHP, puede especificar acciones sobre una etiqueta de inicio, etiqueta de cierre o una etiqueta completa. Según sus deseos, es posible que desee realizar una acción específicamente en la etiqueta de cierre.
Depende de su entorno, y de los datos. En ALGUNOS sistemas, hay una diferencia entre una cadena nula y una cadena vacía. Es decir, un tipo de cadena que es "Nada" es muy diferente de una cadena que realmente existe pero que contiene cero caracteres.
Se pueden representar en XML como:
null = "<mystring />"
empty = "<mystring></mystring>"
9 de cada 10 veces, no hace ninguna diferencia, pero hay ocasiones en que la diferencia entre la ausencia de datos y la información vacía es realmente muy significativa ("No sé, todavía" vs. "Lo descubrí, y estaba vacío. ")
En ciertos casos, las etiquetas de apertura / cierre separadas son necesarias: como ejemplo, he encontrado que las etiquetas <script> en HTML necesitan tener una apertura / cierre independiente para funcionar de manera consistente en algunos navegadores. El abrir / cerrar separado es un poco más detallado pero vale la pena en esos casos.
Sí, no es tan simple como parece al principio.
Las diferencias de XSD:
En primer lugar, depende de su tipo de datos. Si usa una definición de esquema XSD, que define los tipos de sus elementos, entonces <element></element>
realidad solo se puede usar para los tipos de cadena . Porque, eso es lo que es, en realidad es un valor de cadena vacía: ""
.
Por lo tanto, es ilegal utilizar <element></element>
para un entero, mientras que por contraste <element/>
es aplicable para todos los tipos simples.
Diferencias de JAXB:
JAXB (Java XML Binding) tiene características similares. Asignaría <element/>
como valores diferentes según el tipo de datos de destino :
- para String, sería un ""
- Para Integer, sería un 0.
- para otros tipos, simplemente lo omitiría.
Podría sentirse tentado a pensar que <element/>
se resolvería en un valor null
. Pero realmente necesitas usar <element xsi:nil="true"/>
para eso. Lo que nunca he visto en la práctica.
HTML:
En HTML siempre existe la tercera opción de <element>
sin cerrar la etiqueta . No sé sobre usted, pero varias veces al día, debo recordarme que HTML no es solo XML. Y eso en realidad significa que <br>
y <br/>
no son lo mismo. No debe usar <br/>
en HTML, y no debe usar <br>
en XHTML.
Angular 2+:
Pero a lo que realmente quería llegar, continuando con la última afirmación, si usa marcos como Angular2 +, hay otra cosa que tener en cuenta.
Sin bucear demasiado en detalle, Angular reemplaza las etiquetas HTML personalizadas con plantillas HTML que están vinculadas a componentes. Sin embargo , solo es compatible con el formato <element></element>
. No está permitido utilizar el formato <element/>
.
Personalmente trato de evitar la sintaxis de <element/>
, porque tiene todo el potencial para hacer que las cosas salgan mal. (= aji malo ).
Son iguales para XML, pero pueden ser diferentes dependiendo de su uso. Por ejemplo, en xhtml1.0, hay una lista oficial de etiquetas permitidas para el cierre automático. Mientras mantengas tu doctype al xhtml correcto, deberías estar bien. Echa un vistazo a esta pregunta de para una explicación más detallada.
Vea las especificaciones de W3C para XML y XHTML:
- http://www.w3.org/TR/xml/#sec-starttags
- http://www.w3.org/TR/xhtml1/dtds.html#a_dtd_XHTML-1.0-Strict
Depende de la declaración del tipo de elemento.
Un elemento sin contenido se dice que está vacío. La representación de un elemento vacío es una etiqueta de inicio seguida inmediatamente por una etiqueta de finalización o una etiqueta de elemento vacío.
pero también
Las etiquetas de elementos vacíos se pueden usar para cualquier elemento que no tenga contenido, se declare o no con la palabra clave VACÍO. Para la interoperabilidad, la etiqueta de elemento vacío DEBE ser usada, y DEBERÍA ser usada solamente, para elementos que están declarados VACÍOS.
Esto significa, cuando su DTD contiene algo como
<!ELEMENT img EMPTY>
deberías usar
<img/>
a menos que tengas una buena razón para usar
<img></img>
Tenga en cuenta que DEBE estar definido en RFC2119 como
Esta palabra, o el adjetivo "RECOMENDADO", significa que pueden existir razones válidas en determinadas circunstancias para ignorar un elemento en particular, pero las implicaciones completas deben entenderse y sopesarse cuidadosamente antes de elegir un curso diferente.
Si está trabajando con XML que no tiene un DTD o un esquema, también puede influir en cómo el XML se serializa con una constante de libxml predefinida :
LIBXML_NOEMPTYTAG (entero): expande las etiquetas vacías (por ejemplo,
<br/>
a<br></br>
)
Pero tenga en cuenta que esta opción actualmente solo está disponible en las funciones DOMDocument::save
y DOMDocument::saveXML
, por lo que no puede usarla con SimpleXml.