Subject: RE: Finding and promoting footnotes
From: "Haarman, Michael" <mhaarman@xxxxxxxxx>
Date: Wed, 30 Nov 2005 00:35:17 -0600
|
> From: Trevor Nicholls [mailto:trevor@xxxxxxxxxxxxxxxxxx]
<snip/>
> trouble. What is the recommended way to process this so that
> the content of
> the single FOOTNOTE which contains an <A ID="x"> which
> matches the document
> body's <A href="id(x)"> is output here?
>
Trevor,
This statement within the template matching "A[@class='footnote']" --
> <xsl:apply-templates select="/XML/FOOTNOTES" mode="body" />
could be specialized to apply to just the TableFootnote node you require:
<xsl:apply-templates select="//*/TableFootnote[A/@ID=$fid]" mode="body"/>
from its current context by calling out to the top of the input XML using
the "//" path expression, but at some runtime expense. You want to avoid
this by making up a key table of TableFootnote elements (at top level of
stylesheet) --
<xsl:key name="footnotes"
match="*/FOOTNOTES/FOOTNOTE/TableFootnote"
use="A/@ID"/>
using the ID attribute of their child A nodes, and apply-templates to the
node-set returned by the desired index --
<xsl:apply-templates select="key('footnotes',
substring-before(substring-after(@href, '(')
, ')')
)"
mode="body"/>
In all these cases, obviously, the template we are applying should have a
match expression "TableFootnote" not "FOOTNOTES"
> This could well be an FAQ but if so, not under the keywords I tried!
>
It is, but there is often difficulty knowing what keywords are appropriate
to a particular problem. This problem, as are so many of XSL, is a grouping
problem.
HTH,
-----------------------------------
Mike Haarman,
XSL Developer,
Internet Broadcasting Systems, Inc.
|