xsl-list
[Top] [All Lists]

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

2007-10-08 13:53:00
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(_at_)virginia(_dot_)edu   Tel: +1 434 924 9973
Web: http://rotunda.upress.virginia.edu/

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>