[xsl] Apply <xsl:number level="any"/> across a collection?

Subject: [xsl] Apply <xsl:number level="any"/> across a collection?
From: David Sewell <dsewell@xxxxxxxxxxxx>
Date: Mon, 8 Oct 2007 16:52:44 -0400 (EDT)
Suppose I am operating on a collection of XML documents returned by
collection("docs.xml"). Further suppose that each document node returned
by collection() contains <p> elements that I want to number sequentially
across the collection in my output. (And assume XSLT 2.0.)

My first stab at this was along these lines:

 <xsl:apply-templates select="collection('docs.xml')"/>

 ... intermediate templates ...

 <xsl:template match="p">
    <xsl:copy>
      <xsl:attribute name="number">
        <xsl:number level="any"/>
      </xsl:attribute>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:template>

Output is all as desired except that the numbering is reset to 1
at each document node. Is it a built-in limitation of
xsl:number that operates within single document nodes only, or am I
missing some way to accomplish what I want other than putting
the whole collection into a variable like so:

  <xsl:variable name="wrapper">
    <wrapper>
      <xsl:sequence select="collection('docs.xml')"/>
    </wrapper>
  </xsl:variable>

and then applying templates to $wrapper? (This works fine,
I'm just wondering if it's the optimal solution.)

DS

-- 
David Sewell, Editorial and Technical Manager
ROTUNDA, The University of Virginia Press
PO Box 801079, Charlottesville, VA 22904-4318 USA
Courier: 310 Old Ivy Way, Suite 302, Charlottesville VA 22903
Email: dsewell@xxxxxxxxxxxx   Tel: +1 434 924 9973
Web: http://rotunda.upress.virginia.edu/

Current Thread