Cómo respetar los espacios en blanco al parsear un XSLT

Cuando parseamos un XSL con información proveniente de un XML para generar una página web, es habitual encontrarse con el problema de que separaciones de caracteres en blanco que hemos puesto en el xsl, tras el parseo desaparecen. Así por ejemplo si tenemos el siguiente xsl:

. . . . 
<xsl:template match="/">
<img src="/imgs/icono.gif"&nbsp;/&gt; <xsl:value-of select="faqs/question/questiontitle"/>
</xsl>
. . . .

Produciría el siguiente html por ejemplo:

<img src="/imgs/icono.gif"&nbsp;/&gt;Título de la pregunta

Como puede verse, no se ha respetado el espacio en blanco que habíamos puesto entre el icono y el título. Para que se respete tenemos dos opciones. La primera sería utilizar un elmento xml:text

. . . . 
<xsl:template match="/">
<img src="/imgs/icono.gif" /><xml:text> </xml:text><xsl:value-of select="faqs/question/questiontitle"/>
</xsl>
. . . .

De esta forma todo lo que esté entre la etiqueta text se copiará tal cual, obteniendo el resultado deseado. Sin embargo si debemos hacer esto muchas veces puede resultar bastante lío, y proclive a fallos. Existe una opción mejor que es la de indicar que se preserven los espacios, tal como define el estándar XML del W3C. Éste indica que mediante la utilización de un atributo que los espacios deben «preservarse».

De esta forma el xsl quedaría de la siguiente forma:

. . . .
<xsl:template match="/" xml:space="preserve">
<img src="/imgs/icono.gif" /> <xsl:value-of select="faqs/question/questiontitle"/>
</xsl>
. . . .

Con la inclusión del parámetro en la etiqueta del template sería suficiente, y no sería necesario indicar cada uno de los espacios que se requiera mantener.

Referencias:

Twitter Digg Delicious Stumbleupon Technorati Facebook Email

Los comentarios están cerrados.