es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Control de espacios en blanco en XSLT con salida de texto.

Usando xsltproc, ¿cómo puedo emitir secciones CDATA sin espacios circundantes, si el formateador que necesito usar formatea alrededor de CDATA como esto al insertar espacio? No es necesario usar xsl:text. También intenté xsl:value-of pero no pude averiguar cómo usar CDATA en xsl:value-of. (Puedo eliminar el espacio alrededor de CDATA, pero el formateador simplemente lo agrega de nuevo).

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" version="1.0" encoding="UTF-8" indent='no' />
    <xsl:strip-space elements="*" />

<xsl:template match="/">
    <xsl:text>/*


*    Licenciado bajo la Licencia Apache, versión 2.0 (la "Licencia");
<xsl:text>/
    <xsl:text>*    Licenciado bajo la Licencia Apache, versión 2.0 (la "Licencia");
*/<xsl:text>
</xsl:text>
</xsl:template>

</xsl:stylesheet>

Salida:

jonsmirl@ares:~/aosp/blogs/jonsmirl.github.io/xml$ xsltproc test.xsl test.xsl
/*
*    Licenciado bajo la Licencia Apache, versión 2.0 (la "Licencia");
*/
/*
*    Licenciado bajo la Licencia Apache, versión 2.0 (la "Licencia");
*/
jonsmirl@ares:~/aosp/blogs/jonsmirl.github.io/xml$

Esta solución funciona, mi error fue pensar que el texto necesitaba estar dentro de CDATA para que el formateador lo dejara en paz.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para generar secciones CDATA sin espacio circundante, puedes utilizar el elemento xsl:text sin contenido y agregar la sección CDATA directamente después de él. Tu error fue pensar que el texto tenía que estar dentro de la CDATA para que el formateador lo dejara en paz. Por lo tanto, no es necesario utilizar CDATA dentro de xsl:text o xsl:value-of, simplemente puedes utilizar texto plano dentro de xsl:text. Aquí tienes un ejemplo de fragmento de código:

    <xsl:template match="/">
        <xsl:text>/*
    </xsl:text>
        <xsl:text> * Con licencia Apache License, Versión 2.0 (la "Licencia");
    </xsl:text>
        <xsl:text> */
    </xsl:text>
        <xsl:text>/*
    </xsl:text>
        <xsl:text> * Con licencia Apache License, Versión 2.0 (la "Licencia");
    </xsl:text>
        <xsl:text> */</xsl:text>
    </xsl:template>
    

    En este ejemplo, se utilizan los elementos xsl:text para generar texto plano sin ningún formato o espacio adicional. El carácter se utiliza para agregar un salto de línea en la salida.

Comments are closed.