2008-10-02 9 views
17

Tengo un documento XML que contiene noticias, y el elemento del cuerpo de una noticia contiene etiquetas p entre el texto sin formato. Cuando uso XSL para recuperar el cuerpo, p.¿Cómo conservo las etiquetas de marcado?

<xsl:value-of select="body" /> 

Parece que las etiquetas p se han eliminado. Estoy usando la implementación de Visual Studio 2005 de XSL.

¿Alguien tiene alguna idea de cómo evitar esto? Gracias.

Respuesta

24

Intente utilizar

<xsl:copy-of select="body"/> 

lugar. De w3schools' documentation on same:

El elemento <xsl:copy-of> crea una copia del nodo actual.

Nota: los nodos Namespace, nodos secundarios, y los atributos del nodo actual son copiados automáticamente también.

+0

Gracias Blair, esto ha funcionado. – gilles27

+0

Ahorrador de vida. Gracias. – SearchForKnowledge

1

Si tiene control sobre el documento de entrada, CDATA es el camino correcto a seguir.

+0

Gracias pero no puedo cambiar el formato del documento. – gilles27

+0

Si envuelvo mi HTML anidado usando CDATA, obtengo el HTML literal, quiero retener feeds de línea (es decir, etiquetas de párrafo). – PeterX

-1

Esto se debe a que el motor está interpretando la etiqueta <p> (excluyéndola para la salida). Debe especificar que desea el contenido "tal como está", utilizando el atributo "disable-output-escaping = yes | no".

<xsl:value-of select="body" disable-output-escaping="yes"/> 
+0

Intenté esto pero no hizo ninguna diferencia. – gilles27

+0

intente con falso ... Siempre recuerdo el uso correcto –

+0

otro error ... era SÍ o NO –

4

Si usted no tiene control sobre el documento de entrada, copy-of debería funcionar:

De http://www.xml.com/pub/a/2000/06/07/transforming/index.html

"el XSL: copia del elemento, por el contrario, puede copiar el subárbol completo de cada nodo que selecciona la plantilla. Esto incluye atributos, si el atributo de selección del elemento xsl: copy-of tiene el valor apropiado. En el siguiente ejemplo, la plantilla copia los nodos del elemento de título y todos sus nodos descendientes - en es decir, los elementos completos del título, incluidas sus etiquetas, subelementos y atributos: "

<xsl:template match="title"> 
    <xsl:copy-of select="*"/> 
</xsl:template> 
+0

Gracias, esto funciona, seguí la sugerencia de Blair Conrad cuando vi eso primero, pero ustedes dos dijeron lo mismo. – gilles27

1

El valor de un elemento XML, esto es cierto no solo en XSLT, sino en implementaciones DOM, es la concatenación de todos sus nodos de texto descendentes. En XSLT, value-of emite un valor de elemento, mientras que copy-of emite una copia del elemento.

Cuestiones relacionadas