Subject: Re: [xsl] xpath key problems From: Piet van Oostrum <piet@xxxxxxxxxxxxxx> Date: Sun, 21 Nov 2010 16:46:15 -0400 |
Birnbaum, David J wrote: > Dear XSLT List, > > I'd be grateful for advice about a problem I'm having with the use of > keys. ...... > <xsl:key name="msline-pb" match="hm281 | hm280 | hm282" > use="preceding::pb[parent::*/name() eq name()][1]/@folio"/> ...... > <pointer> > <xsl:value-of select="key('msline-pb',.)"/> > </pointer> You have your key backwards. It finds the manuscript entries (hm281 | hm280 | hm282) and it uses the foloi numbers to find them. Instead you want to find folio numbers and give it a manuscript entry to find it. The key() call more or less tries this. As the key values will be atomized you must create a unique atomized value for each manuscript entry. You can do this with generate-id(). The key must only give manuscript entries which have a pb child, otherwise we can't get a folio out of it. Oh yes, we also have to include "ourselves" in the key. With this I get the following: <xsl:key name="msline-pb" match="hm281[pb] | hm280[pb] | hm282[pb]" use="(generate-id(.),following::*[name() eq current()/name()]/generate-id(.))"/> I.e. all the following hm* entries with the same name are used as keys to find the entry with the pb child (and we use generate-id() to create the search value). It would be better to stop the key values at the next entry which has a pb child but this is left as an exercise for the reader :) To retrieve the folio number: <xsl:value-of select="key('msline-pb',generate-id(.))[position()=last()]/pb/@folio"/> Because we don't stop at the next pb entry we have to get the last of the retrieved hm* entries and obtain its folio. It would probably also be faster to split the key in 3 keys, one for each hm* kind. Actually I am curious how much speed-up this key gives, if any. -- Piet van Oostrum Cochabamba. URL: http://pietvanoostrum.com/ Nu Fair Trade woonartikelen op http://www.zylja.com
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] xpath key problems, Martin Honnen | Thread | [xsl] Adding the results of count(), charlieo0 |
Re: [xsl] xpath key problems, Martin Honnen | Date | [xsl] Adding the results of count(), charlieo0 |
Month |