[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Removing namespaces without escaping CDATA???

Subject: Re: Removing namespaces without escaping CDATA???
From: Abel Braaksma <abel.online@xxxxxxxxx>
Date: Mon, 09 Apr 2007 18:58:59 +0200
Re:  Removing namespaces without escaping CDATA???
David Carlisle wrote:

Also, specifying cdata-section-elements here, <xsl:output
cdata-section-elements="qnames" /> seem to have a shortcoming, that
it's too global (as I said earlier). Do you agree to this point?

It has to be global or you have to be able to somehow annotate individual elements in the result tree but teh need to annotate teh result tree leads to all sorts of problems if teh result tree is not immediately serialised by XSLT but passed to some other process, which is why disable-output-escaping is such a problem. There is no standard way of passing a result tree to some other process and recording places where doe is used.

You can 'annotate' the result tree in XSLT 2.0, though possibly not as conveniently as Mukul Gandhi requests. The attribute 'cdata-section-elements' is an AVT in the xsl:result-document element and it must result in one or more qnames. But this requires redesigning your stylesheets in such a way that you use xsl:result-document, instead of xsl:output (but that should not be too hard if it is 'global'). This:


<xsl:variable name="my-cdata" select="'as-cdata'" />
<xsl:result-document cdata-section-elements="{$my-cdata}" href="analyze.xml">
<as-cdata>
<xsl:text>Has some text</xsl:text>
<not-cdata />
</as-cdata>
<as-cdata>Less then is: &lt;, ampersand is: &amp;</as-cdata>
</xsl:result-document>



results in the following output (Saxon 8.9):


<as-cdata><![CDATA[Has some text]]><not-cdata/>
</as-cdata>
<as-cdata><![CDATA[Less then is: <, ampersand is: &]]></as-cdata>


You have all freedom, the only drawback compared to your d-o-e-like approach is that you will have to determine the contents of the AVT beforehand, instead of per element. But as Michael and David already pointed out, would you really want to do this?


Cheers,
-- Abel

PS: it is probably better to declare $my-cdata as 'xs:Qname' or 'xs:Qname*'.

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.