xsl-list
[Top] [All Lists]

RE: How do I process a result-tree fragment?

2002-09-26 03:46:56
You need to do:

<xsl:template match="*" mode="escape-apos">
  .. the identity template ..
</xsl:template>

<xsl:template match="text()" mode="escape-apos" name="escape-apos">
  .. your recursive template ..
</xsl:template>

<xsl:apply-templates select="xx:node-set($RTF)" mode="escape-apos"/>

Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com 

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com 
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of 
Greg Bender
Sent: 25 September 2002 23:16
To: XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] How do I process a result-tree fragment?


Currently I am using the following procedure (acquired from
http://www.jenitennison.com) to escape apostrophe characters 
(I need to do this in order to place the resulting 
information in javascript):

<xsl:template name="escape-apos">
   <xsl:param name="string" />
   <!-- create an $apos variable to make it easier to refer to -->
   <xsl:variable name="apos" select='"&apos;"' />
   <xsl:choose>
      <!-- if the string contains an apostrophe... -->
      <xsl:when test='contains($string, $apos)'>
         <!-- ... give the value before the apostrophe... -->
         <xsl:value-of select="substring-before($string, $apos)" />
         <!-- ... the escaped apostrophe ... -->
         <xsl:text>\'</xsl:text>
         <!-- ... and the result of applying the template to 
the string after the apostrophe -->
         <xsl:call-template name="escape-apos">
            <xsl:with-param name="string" 
select="substring-after($string, $apos)" />
         </xsl:call-template>
      </xsl:when>
      <!-- otherwise... -->
      <xsl:otherwise>
         <!-- ... just give the value of the string -->
         <xsl:value-of select="$string" />
      </xsl:otherwise>
   </xsl:choose>
</xsl:template>


This method works great when I pass it a string. However, 
when I pass it a result-tree fragment, I loose the mark-up 
language. For example:

If I pass "<div><b>these word's are bold.</b></div>"

I get "These word\'s are bold."

When what I want is "<div><b>these word\'s are bold.</b></div>"


I've tried replacing the 'xsl:value-of' commands with 
'xsl:copy-of' commands. This solution works if the 
result-tree fragment doesn't contain any apostrophes (it just 
passes the variable through). However, when the result-tree 
fragment contains apostrophes, I loose the result-tree fragment.

I think the contains(), substring-before(), and/or 
substring-after() statements are converting the result-tree 
fragment to a string.

Any help is appreciated.

Regards,

Greg Bender



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>