Foros del Web » Programación para mayores de 30 ;) » Programación General »

Acceder bloque CDATA "puro" con XSL

Estas en el tema de Acceder bloque CDATA "puro" con XSL en el foro de Programación General en Foros del Web. Nuevamente batallando con XSL en algo que pareciera ser simple. Tengo un XML como sigue: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código xml: Ver original <seccion >     ...
  #1 (permalink)  
Antiguo 01/12/2008, 05:59
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Acceder bloque CDATA "puro" con XSL

Nuevamente batallando con XSL en algo que pareciera ser simple. Tengo un XML como sigue:
Código xml:
Ver original
  1. <seccion>
  2.         <code><![CDATA[
  3. Donec nec justo eget felis facilisis fermentum. Aliquam porttitor
  4. mauris sit amet orci. Aenean dignissim pellentesque felis.
  5. ]]>
  6.         </code>
  7. </seccion>
Nótese el salto de línea y los espacios (de la indentación del XML) que hay entre ]]> y la etiqueta de cierre </code>.

Como podrá sospecharse, necesito la información del nodo CDATA tal cuál está; con saltos de línea, indentado, y todo lo que pueda tener, exclusivamente lo que corresponde. Actualmente lo cacho con XSL de la siguiente manera:
Código xml:
Ver original
  1. <xsl:template match="code">
  2.     <xsl:text>
  3. [PROG]</xsl:text>
  4.     <xsl:value-of select="." disable-output-escaping="yes" />
  5.     <xsl:text>[/PROG]
  6. </xsl:text>
  7. </xsl:template>

Obteniendo el siguiente resultado:
Código:
[PROG]
Donec nec justo eget felis facilisis fermentum. Aliquam porttitor 
mauris sit amet orci. Aenean dignissim pellentesque felis.

        [/PROG]
Osea, como estoy recuperando todo el contenido de la etiqueta, incluye el salto de línea y los espacios que hay entre ]]> y </code>. ¿Hay manera traer única y exclusivamente lo que venga entre <![CDATA[ y ]]>?.

Esperaría el siguiente resultado:
Código:
[PROG]
Donec nec justo eget felis facilisis fermentum. Aliquam porttitor 
mauris sit amet orci. Aenean dignissim pellentesque felis.
[/PROG]
Nuevamente, no tengo control sobre el XML que se procesará, la salida es texto plano; toda la info que encontré es para salida tipo XML y/o HTML :-/.

Ojalá nuevamente me brinden una pista. Gracias de antemano .
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #2 (permalink)  
Antiguo 01/12/2008, 09:35
Avatar de Ek-Balam  
Fecha de Ingreso: octubre-2008
Mensajes: 21
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Acceder bloque CDATA "puro" con XSL


Saludos, Jam.

Bueno, lamento haber tenido una confusión en tu post anterior, pero en fin...
no siempre se da en el clavo.

En cuanto a este posteo, lo que deseas hacer lo conseguí de la siguiente
manera:




<?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:apply-templates select="/seccion/code" />
</xsl:template>

<xsl:template match="code">
<pre>[PROG]<xsl:value-of select="text()"/>[/PROG]</pre>
</xsl:template>

</xsl:stylesheet>



Quité los "<xsl:text>" porque daban un salto de línea.
Espero te sea útil.
Buen día.
=0)
  #3 (permalink)  
Antiguo 01/12/2008, 11:34
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Respuesta: Acceder bloque CDATA "puro" con XSL

Buenas Ek-Balam, muchas gracias por el tiempo y el esfuerzo.

Al igual que el tema anterior, estoy trabajando con una salida tipo texto y solo texto. Esto NO ES interpretado por un navegador; los XMLs serán procesados desde línea de comandos por el procesador xsltproc para generar nuevos archivos que son texto plano con, básicamente, solo un cambio de etiquetas (a tipo BBCode) para que sean interpretados por otra aplicación que ya está en funcionamiento. Es solo una "traducción" de la información para otra aplicación, repito, no un navegador.

Eso como aclaración porque veo utilizas la etiqueta <pre> y adivino lo estás procesando en un navegador. Lo raro es que correctamente colocas como output="text" con lo cuál, no debería de interpretarse ... No he podido reproducir tu código :, lo he intentado de todas maneras y sigo teniendo la misma salida, con el salto de línea y los espacios entre [/PROG] y la información.

Igual lo he interpretado desde Firefox (que genera lo mismo que xsltproc) y tengo el mismo resultado. Ahora sí no entendí, ¿desde qué navegador o cómo lo estás interpretando?

Un saludo
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #4 (permalink)  
Antiguo 01/12/2008, 18:04
Avatar de Ek-Balam  
Fecha de Ingreso: octubre-2008
Mensajes: 21
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Acceder bloque CDATA "puro" con XSL


Saludos, Jam.

Pues sí, comúnmente yo visualizo los archivos en navegadores, aunque el
programa editor de xml-xsl que utilizo permite la transformación de los
documentos en xml - xhtml - txt y, claro, desde el mismo visualizo los xml.
Ahora, el que no lo puedas ver en FF, se me hace raro, porque yo lo veo
tal como deseas desde FF y Ópera, sólo en el IE7 se mantiene el texto en
una sola línea.

Veré si encuentro algo mejor y te lo hago saber.
Buen día.
=0)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:50.