Ek-Balam: Perdón por no mencionarlo, creí estaba implícito: La salida tendría que ser texto plano, no HTML. De lo que menciones, veo son cambios para tratarlo como HTML y verlo a través de un navegador, perdona las molestias.
HackmanC: ¡Gracias!. ¡Tan simple!
. La manera de acceder a el texto del nodo es lo que necesitaba; ese 'match="para/text()"' ahí y aplico el normalize-space(.) al contenido. Gracias, diste en el clavo
.
Entonces, paso el XSL final (ahora sí) con los siguientes cambios:
- Agrego <xsl:strip-space elements="*"/>. Esto elimina los espacios sobrantes de todos los elementos, osea, la tabulación y saltos de línea entre nodos. Estoy trabajando con texto plano
, es necesario esto.
- Agrego el template para eliminar los saltos de línea (limitado a 80 caracteres) del nodo <para>, gracias al código de HackmanC.
- Agrego un salto de línea después de [/TITLE]. Nuevamente, al estar trabajando con texto plano, los saltos de línea son igual caracteres implicitos.
Código xml:
Ver original<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:strip-space elements="*" />
<xsl:template match="/">
<xsl:for-each select="./*">
<xsl:apply-templates />
</xsl:for-each>
</xsl:template>
<xsl:template match="title">
<xsl:text>[TITLE]</xsl:text>
<xsl:value-of select="." />
<xsl:text>[/TITLE]
</xsl:text>
</xsl:template>
<xsl:template match="def">
<xsl:text>[DEF]</xsl:text>
<xsl:value-of select="." />
<xsl:text>[/DEF]</xsl:text>
</xsl:template>
<xsl:template match="para/text()">
<xsl:value-of select="normalize-space(.)"/>
</xsl:template>
</xsl:stylesheet>
Y voalá!
. Muchas gracias a todos, creo ahora sí está solucionado, ojalá le sirva a alguien más.