Etiquetas de cierre automático en archivos XML

Me di cuenta de que funcionan con PHP SimpleXML.

Pero todos los ejemplos XML que encontré en la web los cierran de la vieja manera:

¿Hay alguna razón por la que debería usar el método anterior?

Vea las especificaciones W3C para XML y XHTML:

Depende de la statement del tipo de elemento

Se dice que un elemento sin contenido está vacío. La representación de un elemento vacío es una etiqueta de inicio seguida inmediatamente de una etiqueta final o una etiqueta de elemento vacío.

pero también

Las tags de elementos vacíos se pueden usar para cualquier elemento que no tenga contenido, ya sea que se declare o no con la palabra clave EMPTY. Para la interoperabilidad, la etiqueta del elemento vacío DEBERÍA ser utilizada, y DEBERÍA ser utilizada únicamente, para los elementos declarados VACÍOS.

Esto significa, cuando su DTD contiene algo así como

 < !ELEMENT img EMPTY> 

deberías usar

  

a menos que tenga una buena razón para usar

  

Tenga en cuenta que SHOULD se define en RFC2119 como

Esta palabra, o el adjetivo “RECOMENDADO”, significa que puede haber razones válidas en circunstancias particulares para ignorar un artículo en particular, pero las implicaciones completas deben ser entendidas y sopesadas cuidadosamente antes de elegir un curso diferente.

Si está trabajando con XML que no tiene una DTD o Schema, también puede influir en cómo se serializa el XML con una constante libxml predefinida :

LIBXML_NOEMPTYTAG (integer): expande las tags vacías (por ejemplo,
para
)

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.

Cuando desee utilizar el analizador xml de PHP, puede especificar acciones sobre una etiqueta de inicio, una etiqueta de cierre o una etiqueta completa. En función de sus deseos, es posible que desee realizar una acción específicamente en la etiqueta de cierre.

En ciertas instancias, las tags de apertura / cierre separadas son necesarias: como ejemplo, he encontrado que las tags

Son los mismos para XML, pero pueden ser diferentes según su uso. Por ejemplo, en xhtml1.0, hay una lista oficial de tags permitidas para el cierre automático. Mientras mantenga su doctype en el xhtml correcto, debería estar bien. Consulte esta pregunta sobre stackoverflow para obtener una explicación más detallada.

Sí, no es tan simple como parece al principio.

Diferencias XSD:

En primer lugar, depende de tu tipo de datos. Si usa una definición de esquema XSD, que define los tipos de sus elementos, entonces solo puede usarse para tipos de cadenas . Porque, eso es lo que es, en realidad es un valor de cadena vacío: "" .

Por lo tanto, es ilegal usar para un entero, mientras que por contraste es aplicable para todos los tipos simples.

Diferencias JAXB:

JAXB (Java XML Binding) tiene peculiaridades similares. Asignaría como valores diferentes según el tipo de datos de destino :

  • para String, sería un “”
  • para Entero, sería un 0.
  • para otros tipos, simplemente lo saltaría.

Podría estar tentado a pensar que se resolvería con un valor null . Pero en realidad necesitas usar para eso. Que nunca he visto en la práctica.

HTML:

En HTML, siempre hay una tercera opción de sin etiqueta de cierre . No sé ustedes, pero varias veces al día, tengo que recordarme a mí mismo que HTML no es solo XML. Y eso en realidad significa que
y
no son lo mismo. No debe usar
en HTML, y no debe usar
en XHTML.

Angular 2+:

Pero a lo que realmente quería llegar, continuando en la última statement, si usa frameworks como Angular2 +, hay otra cosa que debe tener en cuenta.

Sin bucear demasiado en detalle, Angular reemplaza las tags HTML personalizadas con plantillas HTML que están vinculadas a los componentes. Sin embargo , solo admite el formato . No tienes permiso para usar el formato .

Personalmente trato de evitar la syntax , porque tiene todo el potencial para hacer que las cosas vayan mal. (= mal aji ).

Depende de tu entorno y 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 = ""

empty = ""

9 veces de cada 10, no hace una pequeña diferencia, pero hay veces en que la diferencia entre no datos y datos vacíos es muy significativa (“No sé, todavía” vs. “Descubrí, y estaba vacío. “)