RE: [xsl] Finding and promoting footnotes

Subject: RE: [xsl] 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.

Current Thread