RE: [xsl] Preserve CDATA for all elements

Subject: RE: [xsl] Preserve CDATA for all elements
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Sun, 14 May 2006 18:48:31 +0100
Sorry, can't be done. The XSLT processor doesn't get to see where the CDATA
sections were in the source document.

Remember that CDATA sections are just a keyboard shortcut. The following are
all exactly equivalent, and your XSLT processor will see the same input
whichever form you use:


As a matter of interest, *why* do you want to preserve the CDATA sections in
the input document?

If it's really important, you could put the XML through a Perl program or
similar that converts the CDATA section to an XML element as a
pre-processing phase and then does the reverse as a post-process.

Michael Kay

> -----Original Message-----
> From: Jagdishwar (Jagsmiles) [mailto:jagsmiles@xxxxxxxxx] 
> Sent: 14 May 2006 18:29
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Preserve CDATA for all elements
> I would like to put the <![CDATA[ elements as is in my 
> transformed xml.
> So, i had used following declaration at the beginning of the xsl:
> 	<xsl:output method="xml" cdata-section-elements="elementOne
> elementTwo elementThree"/>
> Its works fine for transforming the specified elements (i.e 
> elementOne elementTwo elementThree) along with the CDATA.
> Actually i want to preserve CDATA as is, in all the elements 
> my source xml.
> But Its not very comfortable to add each and every element to 
> the cdata-section-elements attribute.
> I tried using * instead of the element names.
> 	<xsl:output method="xml" cdata-section-elements="*"/> 
> but it does not work, the xslt transformer says:
> "This name may not contain the '*' character"
> But * works fine in other elements like xsl:strip-space
> 	<xsl:strip-space elements="*"/>
> Is there any way, where i can specify in xsl, to preserve all 
> the CDATA for all the elements of the source xml document.
> Thank you all
> Kind Regards,
> Jagdishwar,
> Jagsmiles @

Current Thread