Ver Mensaje Individual
  #10 (permalink)  
Antiguo 01/12/2008, 02:19
Avatar de jam1138
jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 4 meses
Puntos: 102
Respuesta: Procesar etiqueta dentro de texto - XML -> XSL

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
  1. <?xml version="1.0" ?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3.  
  4. <xsl:output method="text" />
  5. <xsl:strip-space elements="*" />
  6.  
  7. <xsl:template match="/">
  8.    <xsl:for-each select="./*">
  9.       <xsl:apply-templates />
  10.    </xsl:for-each>
  11. </xsl:template>
  12.  
  13. <xsl:template match="title">
  14.    <xsl:text>[TITLE]</xsl:text>
  15.    <xsl:value-of select="." />
  16.    <xsl:text>[/TITLE]
  17. </xsl:text>
  18. </xsl:template>
  19.  
  20. <xsl:template match="def">
  21.    <xsl:text>[DEF]</xsl:text>
  22.    <xsl:value-of select="." />
  23.    <xsl:text>[/DEF]</xsl:text>
  24. </xsl:template>
  25.  
  26. <xsl:template match="para/text()">
  27.    <xsl:value-of select="normalize-space(.)"/>
  28. </xsl:template>
  29.  
  30. </xsl:stylesheet>

Y voalá! . Muchas gracias a todos, creo ahora sí está solucionado, ojalá le sirva a alguien más.
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"