No Sabes lo que hace CDATA en xml? Aprende qué es y cómo usarlo.

¿Qué significa el nodo <! [CDATA []]> en un documento XML?

¿Qué y por qué usarlo?

CDATA son las siglas de Character Data(Datos de caracteres). Puedes usar esto para escapar algunos caracteres que, de lo contrario, se tratarán como XML normal . Los datos que contiene no se analizarán. Por ejemplo, si deseas pasar una ecuación matemática que contenga < o > , puedes usar CDATA para hacerlo. De lo contrario, obtendrá un error, ya que se analizará como XML normal y no será válido.

El siguiente documento xml se analizará incorrectamente, ya que la descripción de los gofres belgas contiene " 5 < 6":

<?xml version="1.0" encoding="UTF-8"?>
<breakfast_menu>
<food>
  <name>Waffles Belgas</name>
  <price>$5.95</price>
  <description>
    Nuestros famosos Waffles belgas con un montón de jarabe de arce real. 5 < 6
  </description>
  <calories>650</calories>
</food>
<food>
  <name>Tostadas Francesas</name>
  <price>$4.50</price>
  <description>Rebanadas gruesas hechas de nuestro pan casero de masa fermentada</description>
  <calories>600</calories>
</food>
</breakfast_menu>

Si valida el documento xml anterior, obtendrá eso:

XML Invalid data or markup

Ten en cuenta que también puedes resolver este problema, codificando esos caracteres en sus entidades html (usando html_entities en php, por ejemplo).

<example-code>
    while (x &lt; len &amp;&amp; !done) {
        print( &quot;hello.&quot; );
        ++x;
    }
</example-code>

Sin embargo, esto puede resultar complicado, ya que debes estar atento a cuándo codificar y decodificar esas entidades, por lo que es recomendable utilizar CDATA en su lugar.

¿Cómo usarlo?

Las secciones CDATA se pueden agregar en cualquier lugar donde puedan aparecer datos de caracteres; se utilizan para escapar de bloques de  texto que contienen caracteres que, de otro modo, se reconocerían como marcado . Las secciones CDATA comienzan con la cadena "  <![CDATA[ " y terminan con la cadena "  ]]> ".

Simplemente envuelves el contenido de un nodo con la etiqueta CDATA:

<node><![CDATA[
  Hola, este es mi <b>contenido de HTML</b> analizado con etiquetas html como datos sin problemas. Y sí, 5 < 6 :)
]]></node>

Entonces, el primer problema del documento de ejemplo debería resolverse envolviendo el contenido dentro de una etiqueta cdata:

<?xml version="1.0" encoding="UTF-8"?>
<breakfast_menu>
<food>
  <name>Waffles Belgas</name>
  <price>$5.95</price>
  <description><![CDATA[
    Nuestros famosos Waffles belgas con un montón de jarabe de arce real. 5 < 6
  ]]></description>
  <calories>650</calories>
</food>
<food>
  <name>Tostadas Francesas</name>
  <price>$4.50</price>
  <description>Rebanadas gruesas hechas de nuestro pan casero de masa fermentada</description>
  <calories>600</calories>
</food>
</breakfast_menu>

Y en lugar de convertir los caracteres a sus entidades html, usaríamos en su lugar:

<example-code><![CDATA[
while (x < len && !done) {
    print( "Hello." );
    ++x;
    }
]]></example-code>

Es útil, ¿no?

Conclusiones y consejos finales

  • En CDATA no puede incluir la cadena ]]> (CDEnd) en el contenido, de lo contrario, el xml también se analizará incorrectamente.
  • Sintácticamente, se comporta de manera similar a un comentario, pero la etiqueta cdata sigue siendo parte del documento.
  • Las secciones CDATA no pueden anidar nodos de documentos (incluso si son nodos xml válidos, no se analizarán ya que es el contenido de ese nodo)

Ingeniero de Software Senior en EPAM Anywhere. Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores