By calling key() from the context of the xref, you're only getting
back the xrefs with the same @href, so you'll only ever have one group
and position() will only ever return 1.
It may not be terribly efficient, but you could add this to the
<xsl:number> in the XSLT code you posted:
count="xref[not(@href = preceding::xref/@href)]"
Or, replace the <xsl:number> completely with:
<xsl:value-of select="count(distinct-values(preceding::xref/@href)) + 1"/>
Determining which one works better is left as an exercise for the OP. :)
-Brandon :)
On Tue, Oct 11, 2011 at 8:42 AM, Emma Burrows
<Emma(_dot_)Burrows(_at_)rpharms(_dot_)com> wrote:
From: David Carlisle [mailto:davidc(_at_)nag(_dot_)co(_dot_)uk]
change that to xsl:value-of select="position()" having grouped them all
you just want to know which group you ar in and position(0 tells you that
Thank you very much for looking into this. Alas, this XSL:
<xsl:key name="fn" match="xref" use="@href"/>
...
<sup>
<xsl:for-each-group select="key('fn', @href)" group-by="@href">
<xsl:value-of select="position()"/>
</xsl:for-each-group>
</sup>
Just results in every reference being numbered as 1. I'm not sure why -
either because the grouping is based on a key or because this appears in the
"xref" template?
To move this forward, here is some actual XML for you:
Input
=====
<p><b>Caesarean section</b></p>
<p>Single dose<xref href="footnote-113022.dita#bnf_113022" type="fn"/> of
i/v cefuroxime</p>
<p>Administer immediately after umbilical cord is clamped. Add i/v
teicoplanin<xref href="footnote-202621.dita#bnf_202621" type="fn"/></p>
<p><b>Hysterectomy</b><xref href="footnote-204127.dita#bnf_204127"
type="fn"/></p>
<p>Single dose<xref href="footnote-113022.dita#bnf_113022" type="fn"/> of
i/v cefuroxime + i/v
metronidazole<xref href="footnote-113019.dita#bnf_113019" type="fn"/>
<i>or</i> i/v gentamicin + i/v metronidazole<xref
href="footnote-113019.dita#bnf_113019" type="fn"/>
<i>or</i> i/v co-amoxiclav alone</p>
<p>Use single dose<xref href="footnote-113022.dita#bnf_113022" type="fn"/>
of
i/v gentamicin + i/v metronidazole<xref
href="footnote-113019.dita#bnf_113019" type="fn"/> or
add i/v teicoplanin<xref href="footnote-202621.dita#bnf_202621"
type="fn"/></p>
<p><b>Termination of pregnancy</b></p>
<p>Single dose<xref href="footnote-113022.dita#bnf_113022" type="fn"/> of
oral metronidazole</p>
XSL:
====
<xsl:key name="fn" match="xref[@type='fn']" use="@href"/>
<xsl:template match="p">
<xsl:element name="{local-name()}"><xsl:apply-templates/></xsl:element>
</xsl:template>
<xsl:template match="xref">
<a href="{@href}">
<sup>
<xsl:for-each-group select="key('fn', @href)" group-by="@href">
<xsl:number level="any"/>
</xsl:for-each-group>
</sup>
</a>
</xsl:template>
(Incorrect) Output:
===================
<p>Caesarean section</p>
<p>Single dose<a href="footnote-113022.dita#bnf_113022"><sup>1</sup></a> of
i/v cefuroxime</p>
<p>Administer immediately after umbilical cord is clamped. Add i/v
teicoplanin<a href="footnote-202621.dita#bnf_202621"><sup>2</sup></a></p>
<p>Hysterectomy<a href="footnote-204127.dita#bnf_204127"><sup>3</sup></a></p>
<p>Single dose<a href="footnote-113022.dita#bnf_113022"><sup>1</sup></a> of
i/v cefuroxime + i/v
metronidazole<a href="footnote-113019.dita#bnf_113019"><sup>5</sup></a>
or i/v gentamicin + i/v metronidazole<a
href="footnote-113019.dita#bnf_113019"><sup>5</sup></a>
or i/v co-amoxiclav alone</p>
<p>Use single dose<a href="footnote-113022.dita#bnf_113022"><sup>1</sup></a>
of
i/v gentamicin + i/v metronidazole<a
href="footnote-113019.dita#bnf_113019"><sup>5</sup></a> or
add i/v teicoplanin<a
href="footnote-202621.dita#bnf_202621"><sup>2</sup></a></p>
<p>Termination of pregnancy</p>
<p>Single dose<a href="footnote-113022.dita#bnf_113022"><sup>1</sup></a> of
oral metronidazole</p>
So essentially, I get footnote reference numbers 1, 2, 3 and 5. I'd like
number 5 to come out as number 4 as I'd expect. Thank again, David, and
whoever would like to jump in to give you a break. :)
--~------------------------------------------------------------------
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>
--~--
--~------------------------------------------------------------------
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>
--~--