xsl-list
[Top] [All Lists]

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

2005-08-02 15:29:37
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(_at_)saxonica(_dot_)com] 
Sent: Tuesday, August 02, 2005 1:19 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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(_at_)seagullsoftware(_dot_)com]
Sent: 02 August 2005 20:20
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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










--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--





--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--




--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>