> Actually it's quite tricky if you want to have a function/template that both
returns a modified version of the source tree with new numbers inserted, and
also returns the latest number used. Returning two results using maps is
possible, but not easy.
>
> Computing the numbers is ideally done by a fold operation that processes all
the nodes in the tree in document order, and XSLT 3.0 accumulators are
essentially syntactic sugar for such a fold operation.
>
Having said that it can also be done using memo functions: write a function
that computes the number for a significant node by getting the number for the
first preceding significant node and adding 1 (or whatever), and make this a
memo function. XSLT 3.0 supports memo functions using
<xsl:function .... cache="yes">
Michael Kay
Saxonica
|