[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: cdata-section-elements - not wrapping real xml in
Abie,
You wrote: I am trying to certain elements in my output xml wrapped in cdata markers, so I'm trying to use cdata-section-elements="myElement". I think the problem here is that you're trying to slip back and forth across the line between XML and serialized-text-representing-XML -- but that's a line you aren't supposed to slip across so readily. Take this example XML: <warning>This is <emph>my</emph> string: lay off!</warning> The value of this node is the string "This is my string: lay off!". But it sounds like you want it to be "This is <emph>my</emph> string: lay off!" The way of representing this latter string in XML is: "This is &_lt;emph>my&_lt;/emph> string: lay off!" or "This is &_lt;emph&_gt;my&_lt;/emph&_gt; string: lay off!" or "<![CDATA[This is <emph>my</emph> string: lay off!]]>" or "This is <![CDATA[<]]>emph>my<![CDATA[<]]>/emph> string: lay off!" or any of an indefinite number of possibilities. (Note: underscores inserted to fool mailers.) If your stylesheet is building the node tree: --warning --text()--"This is " --emph --text()--"my" --text()--" string: lay off!" How should the serializer know that the <warning> node should be expressed as XML, but the <emph> node should be written in "escaped" form? The cdata-elements feature is there to allow using CDATA marked sections as syntax sugar for the more cumbersome &_lt; notation. It doesn't magically turn a node tree into an escaped string serialization thereof, so it won't do this. I think what you need is to write out the "elements" inside the string you want to preserve in escaped form. You can do this with templates easily enough. This means they won't look like elements in your stylesheet -- because you don't want elements in your output. For example (here are a couple of templates I have lying around that will do this): <xsl:template name="write-starttag"> <xsl:text><</xsl:text> <xsl:value-of select="local-name()"/> <xsl:for-each select="@*"> <xsl:call-template name="write-attribute"/> </xsl:for-each> <xsl:text>></xsl:text> </xsl:template> <xsl:template name="write-endtag"> <xsl:text></</xsl:text> <xsl:value-of select="local-name()"/> <xsl:text></xsl:text> </xsl:template> <xsl:template name="write-attribute"> <xsl:text> </xsl:text> <xsl:value-of select="local-name()"/> <xsl:text>="</xsl:text> <xsl:value-of select="."/> <xsl:text>"</xsl:text> </xsl:template> <xsl:template match="*" mode="escape-xml"> <xsl:call-template name="write-starttag"/> <xsl:apply-templates/> <xsl:call-template name="write-endtag"/> </xsl:template> <xsl:template match="warning"> <xsl:apply-templates mode="escape-xml"/> </xsl:template> If you use this kind of technique to write pseudo-XML to your output, that's what you'll get; and you are free to have it be expressed in CDATA marked sections or with delimiters escaped ad hoc ... either way, it doesn't matter. It's a moot point (or would the Brits say it's not a moot point?), a red herring, (6 * 1 || $dozen/2), etc. Of course, being pseudo-XML this stuff won't parse -- but it sounds like you don't want it to. Cheers, Wendell
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|