[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Michael Kay wrote:
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:
But I do completely agree with Michael's point, which is to favor template rules over explicit conditionals when possible :-)
Evan
Re: [xsl] Edit text-nodes with XSLT 2.0
Subject: Re: [xsl] Edit text-nodes with XSLT 2.0 From: Evan Lenz <evan@xxxxxxxxxxxx> Date: Fri, 07 Apr 2006 15:47:58 -0700 |
Michael Kay wrote:
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()"> <!-- 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..
<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
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Edit text-nodes with XSLT, Michael Kay | Thread | AW: [xsl] Edit text-nodes with XSLT, Beat Pfister |
RE: [xsl] Getting a specific elemen, Michael Kay | Date | Re: [xsl] Getting a specific elemen, Jay Bryant |
Month |