RE: [xsl] what index is the current item in a list?

Subject: RE: [xsl] what index is the current item in a list?
From: "Lee Breisacher" <LBreisacher@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 2 Aug 2005 18:29:37 -0400
Ah, preceding-sibling was the trick.  Thanks much!

Btw, I don't see how your first solution under 1.0 works - seems like it
would count the total number of type2 Items, not the "index" of this
particular type2 Item.

Lee


> -----Original Message-----
> From: Michael Kay [mailto:mike@xxxxxxxxxxxx]
> Sent: Tuesday, August 02, 2005 1:19 PM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE: [xsl] what index is the current item in a list?
>
> In XSLT 2.0:
>
> <xsl:number select="parent::Item" count="*[Type='type2']"/>
>
> In 1.0:
>
> <xsl:for-each select="parent::Item">
>   <xsl:number count="*[Type='type2']"/>
> </xsl:for-each>
>
> Or if you prefer:
>
> count(parent::Item/preceding-sibling::*[Type='type2'])
>
> Michael Kay
> http://www.saxonica.com/
>
>
>
> > -----Original Message-----
> > From: Lee Breisacher [mailto:LBreisacher@xxxxxxxxxxxxxxxxxxx]
> > Sent: 02 August 2005 20:20
> > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > Subject: [xsl] what index is the current item in a list?
> >
> > I want to do something that seems like it should be easy,
> but I cannot
> > figure it out.
> >
> > I have a list of items like this in the input XML:
> >
> > <Item>
> >    <Type>type1</Type>
> >    .. Other elements here..
> > </Item>
> > <Item>
> >    <Type>type2</Type>
> >    .. Other elements here..
> > </Item>
> > <Item>
> >    <Type>type1</Type>
> >    .. Other elements here..
> > </Item>
> > <Item>
> >    <Type>type3</Type>
> >    .. Other elements here..
> > </Item>
> > <Item>
> >    <Type>type2</Type>
> >    .. Other elements here..
> > </Item>
> >
> > Each "Type" is handled differently, so the templates look like this:
> >
> > <xsl:template match="*[Type = 'type1']">
> > 	.. Do type1 stuff here..
> > </xsl:template>
> >
> > <xsl:template match="*[Type = 'type2']">
> > 	.. Do type2 stuff here..
> > </xsl:template>
> >
> > <xsl:template match="*[Type = 'type3']">
> > 	.. Do type3 stuff here..
> > </xsl:template>
> >
> >
> > Now, further down in the input XML is another list of items related
> > to, say, type2 Items, in the same order as in the Item list, like
> > this:
> >
> > <Type2Info>
> >     .. Elements related to the first type2 item is here..
> > </Type2Info>
> > <Type2Info>
> >     .. Elements related to the second type2 item is here..
> > </Type2Info>
> >
> >
> > So, I'm inside the second match template above and I want to get at
> > the proper Type2Info element. Logically, what I want to do
> is this:
> > "Get the Nth Type2Info node where N is the ordinal number
> of the type2
> > Item within the list of type2 Items."
> >
> > I can make a list of just the type2 Items, that's easy. And I can
> > access the Nth Type2Info item, that's easy. I can even find the
> > current type2 Item within the list of type2 Items, but I
> can't see how
> > to determine what N is. I've studied position() and xml:number and
> > count(), etc. but nothing seems quite what I need.
> >
> > Help!
> >
> > Thanks,
> >
> > Lee

Current Thread