Re: [xsl] xsl:number and conditional

Subject: Re: [xsl] xsl:number and conditional
From: Bruce D'Arcus <bdarcus@xxxxxxxxx>
Date: Tue, 31 May 2005 12:03:18 -0400
On 5/31/05, Michael Kay <mike@xxxxxxxxxxxx> wrote:
> > If I understand right, this, in the context of a function:
> >
> > <xsl:number level="any" select="$footcite"
> >
> > count="db:footnote|db:citation[not($footcite/ancestor::db:foot
> > note)]"/>
> >
> > ... should not be counting db:citation elements which are descendents
> > of db:footnote.
> >
> > Is that right?
>
> Not quite. There are two cases:
>
> if $footcite has an ancestor that is a db:footnote, then it counts all
> db:footnote elements

.. but not the db:citation descendent?

> otherwise, it counds all db:footnote and db:citation elements

$footcite in this context is a function parameter that is defined as
element(), but in practice is either db:footnote or db:citation.  So I
have:

  <xsl:function name="bib:number-footcite" as="xs:string">
    <xsl:param name="footcite" as="element()"/>
    <xsl:choose>
      <xsl:when test="$chapters/db:chapter">
        <xsl:number level="any" select="$footcite"
          count="db:footnote|db:citation[not($footcite/ancestor::db:footnote)
]"
from="db:chapter"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:number level="any" select="$footcite"
          count="db:footnote|db:citation[not($footcite/ancestor::db:footnote)
]"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:function>

I then call the function in those templates like so:

	<xsl:template match="db:citation">
	  <xsl:choose>
	    <xsl:when test="$citeclass='note-bib' or $citeclass='note-nobib'">
	      <xsl:variable name="footnote-number">
	        <xsl:value-of select="bib:number-footcite(.)"/>
	      </xsl:variable>
	      <xsl:text>[</xsl:text>
	      <a href="#fn{$footnote-number}" name="fnm{$footnote-number}"
class="footnote-mark">
	        <xsl:value-of select="$footnote-number"/>
	      </a>
	      <xsl:text>]</xsl:text>
	    </xsl:when>
	    <xsl:otherwise>
	      <xsl:call-template name="bib:format-citation">
	        <xsl:with-param name="output-format" select="'xhtml'"/>
	      </xsl:call-template>
	    </xsl:otherwise>
	  </xsl:choose>
	</xsl:template>

So if I don't specify not to count db:citation elements that are
descendents of db:footnote, they get double-counted.

Bruce

Current Thread