2011-02-03 23 views
6

que tienen un documento XML similar a:XSLT etiquetas HTML de salida de XML

<tag> 
    <content>adsfasdf<b>asdf</b></content> 
</tag> 

me gustaría para el XSLT para seleccionar el elemento de contenido y mostrar todo el contenido:

<xsl:value-of select="/tag/content"/> 

El XSLT está configurado para representar como HTML. ¿Hay alguna manera de que pueda obtener el valor de/copiar para mostrar el contenido exacto sin tener que renderizarlo?

Lo que estoy buscando es

asdfasdf<b>asdf</b> 

Y no:

asdfasdf asdf

+0

Buena pregunta, +1. Sí, hay una manera de hacerlo: ver las respuestas de @ Nick-Jones y de mí. :) –

Respuesta

10

Es necesario para escapar de los nombres de las etiquetas dentro del contenido, me gustaría recomendar algo como:

<xsl:template match="content//*"> 
    <xsl:value-of select="concat('&lt;',name(),'&gt;')"/> 
    <xsl:apply-templates/> 
    <xsl:value-of select="concat('&lt;/',name(),'&gt;')"/> 
</xsl:template> 

que luego se puede llamar con:

<xsl:apply-templates select="/tag/content"/> 
+0

+1 para la respuesta más adecuada. –

+0

+1 para una respuesta correcta. – Flack

+0

+1 Correcto: transformar un nodo establecido en ** un nodo de texto **. Consejo: considere los casos de elementos, atributos y comentarios vacíos (y PI si desea completarlo) –

1

manera rápida y sucia:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html" indent="yes"/> 

    <xsl:template match="content"> 
     <xsl:copy-of select="text() | *"/> 
    </xsl:template> 
</xsl:stylesheet> 

resultado en contra de su voluntad de muestra be:

adsfasdf<b>asdf</b> 

Otro enfoque:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html" indent="yes"/> 

    <xsl:template match="b"> 
     <xsl:copy> 
      <xsl:apply-templates/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 
+0

+1 para la sugerencia correcta de usar 'copy-of' en lugar del' value-of' que el poster tiene en su código.Pero creo que hacer 'copy-of select =" node() "' basta para el modo rápido y sucio, sin necesidad de nombrar texto y elementos secundarios por separado con 'text() | * '. –

+0

@Martin, primero escribí 'node()', pero luego reconsidere :) – Flack

+0

Dije copy-of/value-of – monksy

1

Me gustaría e para el XSLT para seleccionar el elemento de contenido y mostrar todos el contenido:

<xsl:value-of select="/tag/content"/> 

El XSLT está configurado para rendir como HTML. ¿Hay alguna manera de que pueda obtener el valor-de/copia-de para mostrar el contenido exacto sin tener que procesar ?

Lo que estoy buscando es

asdfasdf<b>asdf</b> 

Y no:

asdfasdf asdf

La respuesta de @ Nick-Jones se acerca más a lo que quiere.

hacer echar un vistazo a la hoja de estilo XSLT que es parte de la XPath Visualizer de una extensa ejemplo de cómo una pantalla plegable de estilo IE de cualquier documento XML puede ser producida.

Cuestiones relacionadas