| Subject: [xsl] Re: a nicer total sibling count than this From: Dimitre Novatchev <dnovatchev@xxxxxxxxx> Date: Wed, 18 Sep 2002 12:58:34 -0700 (PDT) | 
--- scruss at sympatico dot ca wrote:
> 
> I'm working with a dictionary marked up in XML. Conventionally, one
> numbers definitions (def elements here)  only if there are two or
> more
> definitions for the given part of speech. 
> 
> To my surprise and delight, the following worked, producing heavy def
> numbers with a following non-break space:
> 
>  <xsl:template match="def">
>   <xsl:if test="(count(preceding-sibling::def) +   
>                  count(following-sibling::def)) >= 1">
>    <xsl:element name="strong">
>     <xsl:number/>
>     <xsl:text> </xsl:text>
>    </xsl:element>
>   </xsl:if>
>   <xsl:apply-templates/>
>  </xsl:template>
> 
> Is there a prettier/more efficient way of doing the same thing
> without
> resorting to frankly ugly
> '(count(preceding-sibling::def)+count(following-sibling::def))'?
> 
> thanks,
>  Stewart
Hi Stuart,
count(preceding-sibling::def) +   
                  count(following-sibling::def) >= 1
is equivalent to:
preceding-sibling::def or following-sibling::def
The latter may be significantly optimised by a clever XSLT processor,
because:
1. for either of 
    preceding-sibling::def 
and
    following-sibling::def
it is only necessary to see that a single (at least one) node is
returned by the corresponding expression. This contrasts sharply with
using count(), in which case all nodes in a (potentially long) node-set
have to be counted.
2. If preceding-sibling::def has at least one node, then there's no
need at all to evaluate (the other operand of "or") 
following-sibling::def
__________________________________________________
Do you Yahoo!?
Yahoo! News - Today's headlines
http://news.yahoo.com
 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
| Current Thread | 
|---|
| 
 | 
| <- Previous | Index | Next -> | 
|---|---|---|
| RE: [xsl] xsl array alternatives (n, Wendell Piez | Thread | [xsl] Can you apply a template matc, Mike Carlisle | 
| Re: [xsl] a nicer total sibling cou, Jeni Tennison | Date | RE: [xsl] Limiting a FOR-EACH loop, Gurnam Bedi | 
| Month |