[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
RE: [xsl] First occurrence of glossary term in whole document
Subject: RE: [xsl] First occurrence of glossary term in whole document
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Wed, 30 Jul 2008 18:12:43 -0400
|
Richard,
At 02:06 PM 7/30/2008, you wrote:
Ooops, that isn't true. I can't pass the result document down because the
variable isn't updated until after the full file is processed thereby
allowing multiple references to creep in.
Right. Indeed, the reference you are checking on behalf of would
already have been processed too, thereby introducing a circular dependency.
I'll have another go tomorrow using Liam's suggestion. Thanks. R
Yes. The essence of Lee's suggestion is that in a declarative
mindset, you don't look for a corresponding case that has already
been processed; you look for corresponding cases that should be
privileged over the current case by some static rule, such as that it
appears earlier.
Wanting just the first case (and thereby, a single case for every
class of corresponding cases) is common, and the key-based idiom to
do this (which is generally faster than using XPath to inspect the
tree) is something like this:
(in your data)
<glossterm>ADSL</glossterm>...<glossterm>ADSL</glossterm>...
(in your stylesheet)
<xsl:key name="glossterm-by-value" match="glossterm" use="string()"/>
then in a template matching glossterm (in XSLT 1.0):
<xsl:template match="glossterm">
<xsl:if test="generate-id()=generate-id(key('glossterm-by-value',.)[1])">
... only the first glossterm in the document will pass the test ...
</xsl:if>
</xsl:template>
in XSLT 2.0 one can test ". is key('glossterm-by-value',.)[1]" which
is more legible.
One can also match on that node, but it leaves the glossterms that
don't pass the test unmatched.
Cheers,
Wendell
======================================================================
Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc. http://www.mulberrytech.com
17 West Jefferson Street Direct Phone: 301/315-9635
Suite 207 Phone: 301/315-9631
Rockville, MD 20850 Fax: 301/315-8285
----------------------------------------------------------------------
Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================
|