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

Subject: RE: [xsl] what index is the current item in a list?
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Tue, 2 Aug 2005 21:19:16 +0100
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