1<?xml version="1.0"?>
2<!-- 
3============================================================
4This is a stylesheet that will create, for each input <fruit> element,
5two output elements - <new-fruit1> and <new-fruit2> , each of
6which should wrap the content of the the input fruit/site element
7in a CDATA block.
8<new-fruit1> does this 'properly' via  cdata-section-elements
9<new-fruit2> does it with a workaround named template 'wrap-cdata'
10============================================================
11 -->
12<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
13  <xsl:output method="xml" cdata-section-elements="new-fruit1" indent="yes"/>
14  <xsl:template match="fruit-sites/fruit">
15    <new-fruit1 type="{@type}">
16      The site is at
17      <xsl:value-of select="/site"/>
18    </new-fruit1>
19    <new-fruit2 type="{@type}">
20      <xsl:call-template name="wrap-cdata">
21        <xsl:with-param name="content">
22	  The site is at <xsl:value-of select="/site"/>
23        </xsl:with-param>
24      </xsl:call-template>
25    </new-fruit2>
26  </xsl:template>
27
28  <!-- Wrap $content in a CDATA block  -->
29  <xsl:template name="wrap-cdata">
30    <xsl:param name="content"/>
31    <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text> <!--
32    --><xsl:value-of disable-output-escaping="yes" select="$content"/> <!-- 
33    --><xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
34  </xsl:template>
35</xsl:stylesheet>
36