|
Subject: Re: [xsl] using position() inside Muenchian groups? From: Eric Scheid <eric.scheid@xxxxxxxxxxxxxxx> Date: Tue, 14 Oct 2008 14:07:33 +1100 |
On 14/10/08 1:18 PM, "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx> wrote:
>> I'm thinking I could use Muenchian grouping to pull out all the PRDC
>> sub-fields for a record (and then all the DRCT, WRTR, etc), and I also know
>> how to use position() to access the corresponding sibling...
>
> Actually, that isn't quite precise. That isn't what position()
> returns. The function returns the current position within the set of
> nodes in the scope of the instruction that used select=.
Fair enough, although in my case I know the FMPXMLRESULT doesn't contain any
text nodes between elements but even if it did then nth position within one
<COL/> set would line up with the nth position within the other <COL/> set
I'm interested in.
> So I think your question cannot be answered without seeing more
> details of your code.
I'm only at the stage of cargo culting at the moment :-( I estimate it would
take about 2 hours of fumbling in the dark to figure out just the Muenchian
grouping code, which could all be for naught if it turns out that position()
within the for-each for the keyed group is relative to the subset and not
the original set.
To clarify, say I have this XML
<COL>
<DATA>PRDC</DATA>
<DATA>xxxx</DATA>
<DATA>xxxx</DATA>
<DATA>xxxx</DATA>
<DATA>xxxx</DATA>
<DATA>PRDC</DATA>
<DATA>xxxx</DATA>
</COL>
and whatever code is necessary to create a virtual selection that looks like
<COL>
<DATA>PRDC</DATA>
<DATA>PRDC</DATA>
</COL>
which I then use xsl:for-each to iterate over, would position() inside that
xsl:for-each give me 1,2 or 1,6?
I suspect the former, which means that this code:
<xsl:variable name="p" select="position()"/>
<xsl:value-of select="ancestor::fmp:ROW/fmp:COL[$crew_name]/fmp:DATA[$p]"/>
would output
Alan Jones
Big Cheese
from this source XML
<COL>
<DATA>Alan Jones</DATA>
<DATA>Big Cheese</DATA>
<DATA>Bill Smith</DATA>
<DATA>Camera Guy</DATA>
<DATA>Little Cheese</DATA>
<DATA>Zachary Azimuth</DATA>
<DATA>Dicky Dickens</DATA>
</COL>
which is wrong for me because I wanted
Alan Jones
Zachary Azimuth
> So I think your question cannot be answered without seeing more
> details of your code.
I'm working on it :-) Hard to write code like this though because I don't
know if the wrong answers I'm getting is because I got a bug in my code, or
because it is simply impossible.
e.
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] using position() inside M, G. Ken Holman | Thread | Re: [xsl] using position() inside M, G. Ken Holman |
| Re: [xsl] using position() inside M, G. Ken Holman | Date | [xsl] generating ID strings that ar, Trevor Nicholls |
| Month |