2009-03-31 20 views
11

Tengo una etiqueta CDATA dentro de mi código XML que contiene algunos hipervínculos.Representación de etiquetas HTML dentro de la etiqueta CDATA en XSL

<smartText><![CDATA[ 
Among individual stocks, the top percentage gainers in the S.&P. 500 are 
<a href ='http://investing.domain.com/research/stocks/snapshot 
/snapshot.asp?ric=LNC'>Lincoln National Corp</a> and 
<a href ='http://investing.domain.com/research/stocks/snapshot 
/snapshot.asp?ric=PLD'>ProLogis</a>.]]> 
</smartText> 

Estoy tratando de transformarla en una página HTML de la siguiente manera ...

<p class="smartText"> 
    <xsl:copy-of select="marketSummaryModuleData/smartText"/>          
</p>  

Desafortunadamente la salida hasta la página aparece en texto puro, no como html.

Among individual stocks, the top percentage gainers in the S.&P. 500 are <a href ='http://investing.businessweek.com/research/stocks/snapshot/snapshot.asp?ric=PLD'>ProLogis</a> and <a href ='http://investing.businessweek.com/research/stocks/snapshot/snapshot.asp?ric=LNC'>Lincoln National Corp</a>. 

La sección CDATA se está creando desde una página ASP clásico, por lo que la salida XML real no contiene la sección CDATA. Podría ser eso parte del problema? Parece que no puedo obtener la información para representar en la página. He intentado con múltiples soluciones ofrecidas por las búsquedas de Google, como disable-escape-tags, xsl: copy-of, xsl: value-of y más.

Gracias

+0

solución final ... Por favor, vea esta publicación. http://stackoverflow.com/questions/706314/hyperlinks-within-xslt-templates –

Respuesta

6

Debe corregir el XML para que el HTML deseado (y debe estar bien formado XML) no se encuentre dentro de una sección de CDATA.

Cualquier sección CDATA es solo parte de un nodo de texto() y el procesador XSLT la trata como tal.

Poner marcas en CDATA es universalmente reconocido como una mala práctica y el problema informado es un resultado típico.

DOE (disable-output-escaping) es una característica opcional en XSLT y no se garantiza que se implemente y produzca los mismos resultados esperados en diferentes procesadores XSLT.

citar el W3C XSLT Spec:.

"An XSLT processor is not required to support disabling output escaping. If an xsl:value-of or xsl:text specifies that output escaping should be disabled and the XSLT processor does not support this, the XSLT processor may signal an error; if it does not signal an error, it must recover by not disabling output escaping. "

y:

"Since disabling output escaping may not work with all XSLT processors and can result in XML that is not well-formed, it should be used only when there is no alternative."

+0

@Tomalak d-o-e puede o no resolver el problema del OP, dependiendo de qué procesador (s) XSLT esté usando. –

+0

disable-output-escaping funciona, pero no en todos los navegadores. Dado que este módulo será utilizado por miles de personas, deberá funcionar en todos los navegadores. Parece que tendré que tomar los datos en mi código ASP y analizarlos en varias etiquetas en lugar de una gran cadena de texto. –

+0

@Shane: debe agregar los detalles que necesita para trabajar en todos los navegadores en su pregunta. ¿Una transformación del lado del servidor funcionaría para usted? – AnthonyWJones

11
<p class="smartText"> 
    <xsl:value-of 
    select="marketSummaryModuleData/smartText" 
    disable-output-escaping="yes" 
    /> 
</p> 

EDIT: Como @Randell señala en los comentarios, disable-output-escaping no está presente en todos los procesadores XSLT. Por ejemplo, el de Firefox no admite este atributo. Lo anterior no funcionará para estos procesadores. Todos autónomo Procesadores XSLT Sé que lo soporto, sin embargo.

+0

No se garantiza que funcione en todos los navegadores. – Randell

+0

@Randell: No está nada claro a partir de la pregunta de que la transformación XSLT se está realizando en un navegador. – Tomalak

+0

¿Podría explicar esto un poco? – Randell

0
<xsl:for-each select="marketSummaryModuleData/smartText"> 
    <xsl:copy-of select="node()"/> 
</xsl:for-each> 

<smartText> 
Among individual stocks, the top percentage gainers in the S.&P. 500 are 
<a href ='http://investing.domain.com/research/stocks/snapshot 
/snapshot.asp?ric=LNC'>Lincoln National Corp</a> and 
<a href ='http://investing.domain.com/research/stocks/snapshot 
/snapshot.asp?ric=PLD'>ProLogis</a>. 
</smartText> 
Cuestiones relacionadas