xsl-list
[Top] [All Lists]

Re: [xsl] Edit text-nodes with XSLT 2.0

2006-04-07 15:48:52
Michael Kay wrote:
<xsl:template match="text()"> <!-- in the text node the
replacement of characters with font tags is done-->
                 <xsl:choose>
                        <xsl:when test="not(string(.))" />      
<!-- test if
textcontent is empty -->
                <xsl:otherwise>
                        <xsl:call-template name="find_char1"  >         
                        Some more stuff ...
</xsl:otherwise> <!-- end textcontent is not empty
-->
                  </xsl:choose>           
        </xsl:template>

Incidentally, when I see a template rule whose body consists entirely of an
xsl:choose, my preference is always to split it into one rule for each
branch of the choose:

<xsl:template match="text()[not(string(.))]"/>

<xsl:template match="text()[string(.)]">
  <xsl:call-template name="find_char1"  >
  Some more stuff ...
</xsl:template>

This would also fix the priorities..
Except in this case string(.) is always going to return true for a text node, 
so the other rule will never get invoked. (You can't have an empty text node.) 
The simplification here should just be to replace the whole xsl:choose 
instruction with what is currently the contents of xsl:otherwise:

<xsl:template match="text()">
 <xsl:call-template name="find_char1">
 Some more stuff ...
</xsl:template>

Then add something like priority="1". Perversely, you could also change the 
pattern just to get a higher default priority, like text()[true()]. I wouldn't recommend 
that of course, but text()[string(.)] is effectively the same thing, so that's what made 
me think of it :-)

Alternatively, you could modify the original rule so that it doesn't apply to 
text nodes:

<xsl:template match="@* | * | comment() | processing-instruction()">
 <xsl:copy>
   <xsl:apply-templates select="@*|node()"/>
 </xsl:copy>
</xsl:template>

But I do completely agree with Michael's point, which is to favor template 
rules over explicit conditionals when possible :-)

Evan


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

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