Adrian Herscu schrieb am 22.06.2010 um 11:33 (+0300):

>   <xsl:template match="/document">
>     <document-report>
>       <xsl:for-each select="descendant::section[utils:dummy(true())][1]">
>         <section-report ref="{...@ref}" 
> proc-ref="{ancestor::chapter/@name}" />
>       </xsl:for-each>
>     </document-report>
>   </xsl:template>

> In this case the console will show that dummy() was called *once*

My guess is that the processor, having established that the [1] filter
eliminates all but the first node, optimizes the other calls away.

> The problem is with the variants of 
> descendant::section[utils:dummy(true())][1]:
> 
>  1. xsl variables:
> 
> <xsl:variable name="sections" select="descendant::section" />
> 
> and then use this XPath expression instead
> 
> xalan:nodeset($sections)[utils:dummy(true())][1]
> 
> then the dummy() function will be called 4 times (while the output xml 
> will remain the same) !

The processor doesn't optimize this expression?

>  2. paths with more than one fragments:
> 
> (chapter/section[utils:dummy(true())])[1]
> (chapter/section)[utils:dummy(true())][1]
> ((chapter/section)[utils:dummy(true())])[1]
> 
> in these cases the dummy() function is called 4 times too (while the 
> output xml still remains the same) !

The processor doesn't optimize these expressions either?

-- 
Michael Ludwig

Reply via email to