Estoy tratando de convertir un documento con contenido como el siguiente en otro documento, dejando el CDATA exactamente como estaba en el primer documento, pero no he descubierto cómo para preservar el CDATA con XSLT.Transformar XML con XSLT y preservar CDATA (en Ruby)
XML inicial:
<node>
<subNode>
<![CDATA[ HI THERE ]]>
</subNode>
<subNode>
<![CDATA[ SOME TEXT ]]>
</subNode>
</node>
XML final:
<newDoc>
<data>
<text>
<![CDATA[ HI THERE ]]>
</text>
<text>
<![CDATA[ SOME TEXT ]]>
</text>
</data>
</newDoc>
He intentado algo como esto, pero no hubo suerte, todo se desordenadas:
<xsl:element name="subNode">
<xsl:value-of select="." disable-output-escaping="yes"/>
</xsl:element>
alguna idea de cómo para preservar el CDATA?
Gracias! lanza
El uso de rubí/nokogiri
Actualización: Aquí hay algo que funciona.
<text disable-output-escaping="yes"><![CDATA[</text>
<value-of select="normalize-space(text())" disable-output-escaping="yes"/>
<text disable-output-escaping="yes">]]></text>
, que envolverá todo el texto() en los nodos CDATA, que trabaja para lo que necesito, y se preservará etiquetas HTML dentro del texto.
¿Debo usar ruby y tal vez expresiones regulares para preprocesarlas antes de hacer el xslt, o algo así? ¿De qué otra forma harías eso? Los elementos de sección de cdata no lo están cortando porque estoy usando variables y tal. Gracias por la sugerencia. –
Si necesitas absolutamente CDATA, entonces tendrás que buscar algo que no sea XSLT. Dicho esto, tengo mucha curiosidad sobre la razón por la que lo necesitas. XDM no distingue entre texto y CDATA por una muy buena razón: ninguna aplicación de procesamiento de XML en su sano juicio debería darles una semántica diferente, por lo que CDATA y el escape de caracteres deberían ser intercambiables. –
Estoy utilizando esta información en Flash, y he oído que hay muchos problemas con CDATA/sin CDATA. Todavía no lo he intentado realmente: p –