|
Subject: Re: [xsl] xsl:key, predicates and documents. From: Nic Gibson <nicg@xxxxxxxxxx> Date: Fri, 14 May 2010 14:10:18 +0000 |
On Fri, May 14, 2010 at 04:03:28PM +0200, Martin Honnen wrote:
> Nic Gibson wrote:
> >On Fri, May 14, 2010 at 02:36:18PM +0100, Andrew Welch wrote:
> >>>So, I created keys that look like this:
> >>>
> >>>? ?<xsl:key name="term-key" select="e[@PER='n']" use="@HW"/>
> >>>? ?<xsl:key name="person-key" select="e[@PER='y']" use="@SUR"/>
> >>...
> >>><xsl:template match="eData[@PERS='n']">
> >>>? ?<xsl:variable name="exact" select="key('term-key', @HW)"/>
> >>>? ?...
> >>>
> >>></xsl:template>
> >>>
> >>>We know that there are matches yet this doesn't work unless
> >>>we remove the predicate from the key definition. Are predicates
> >>>usable in key definitions?
> >>It's much harder to help without seeing any input, but I can see a PER
> >>vs PERS difference in the code there... is that it?
> >>
> >
> >Good point but that's just my retyping error. The attribute is @PER.
> >I'm just trying to get some data from its owner
>
> The key function call (with two arguments) finds the indexed nodes
> in the document the context node belongs to so within your
>
> <xsl:template match="eData[@PERS='n']">
>
> the context node is an "eData" element in your $in-doc document and
> the key function call key('term-key', @HW) finds nodes in that
> document. You seem to have two documents and might want to find
> nodes in the other document so you either need to use the key
> function call with the third argument (possible in XSLT 2.0) or you
> need to use an xsl:for-each to change the context to the other
> document.
> In both cases, the way you have set up your stylesheet I think you need
> <xsl:variable name="main-root" select="/"/>
> as a global variable and then you can use
> key('term-key', @HW, $main-root)
> in XSLT 2.0 or with XSLT 1.0
> <xsl:variable name="hwatt" select="@HW"/>
> <xsl:variable name="exact>
> <xsl:for-each select="$main-root">
> <xsl:value-of select="key('term-key', $hwatt)"/>
> </xsl:for-each>
> </xsl:variable>
That'll be it. I had completely forgotten that.
thank you
nic
>
> Does that help? If not then I am afraid you need to show your input
> documents.
>
> --
>
> Martin Honnen
> http://msmvps.com/blogs/martin_honnen/
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] xsl:key, predicates and d, Martin Honnen | Thread | RE: [xsl] xsl:key, predicates and d, Michael Kay |
| Re: [xsl] xsl:key, predicates and d, Nic Gibson | Date | RE: [xsl] xsl:key, predicates and d, Michael Kay |
| Month |