Gracias por la sugerencia Ek-Balam, entiendo lo que dices, pero no tengo acceso al XML... al menos no de primera mano. Son recursos que se extraen externamente, de vez en cuando han de hacer cambios externos, fuera de mi control, tengo que agarrarlos y transformarlos para trabajar con el resultado.
Pero bueno, ahora intenté esto:
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: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:stylesheet>
Trato directamente el nodo <def> sin tratar el <para> y funciona, pero ahora tengo problema con los espacios, pues la tabulación y el fin de línea se conservan y es algo que no debería. Este es (mas o menos) mi salida:
Código:
[TITLE]Titulo[/TITLE]
Lorem [DEF]ipsum[/DEF] postea ipsum complectitur eos in, mandamus disputationi
mediocritatem vix ei.
El XML viene con saltos de línea si el texto pasa de 80 caracteres, pero yo necesito el texto corrido. Además, por la indentación de los nodos del XML igual se indenta el resultado (y hay saltos de línea extras), lo cuál necesito quitar. No puedo aplicar normalize-space() a para porque entonces, regreso al problema inicial (tratar <def> y colocarlo donde tiene que ir). Igual y se puede solucionar esto de otra manera; ¿ideas?.