Re: [xsl] find position of first occurrence in a node set

Subject: Re: [xsl] find position of first occurrence in a node set
From: James Neff <jneff@xxxxxxxxxxxxxxxx>
Date: Tue, 02 Aug 2005 13:24:54 -0400
Jay,

I feel like this is a rather elementary question and a bit embarrased to ask so I'm sending this to you off-list, I hope you don't mind.

Two questions in regards to your answer...


1) I'm not sure why you have the <xsl:template> instruction there other than to make sure the stylsheet you tested with is a proper one. For my use I am doing this:


<xsl:variable name="current_transaction_set" >
<xsl:copy-of select="current-group()" />
</xsl:variable>
<xsl:variable name="first_hl_position">
<xsl:number select="$current_transaction_set/*[@type='HL'][1]"/>
</xsl:variable>



This gives me the correct value I'm looking for from the <xsl:number> instruction. Am I missing something by not using the template instruction? Or is this just a different solution to the same problem (is one better than another)?


2) As you can see I'm having to copy in the current-group() to a variable before I can apply the <xsl:number> instruction. I tried this:

<xsl:number select="current-group[@type='HL'][1]"/>

But the value I get in return is wrong. It seems to be counting the attributes as well as the <segment> elements. I really don't understand why that is. Would you please explain that to me? Is there a way to tell the "select" attribute of the <xsl:number> instruction to ignore the attributes of the <segement> elements so I don't have to worry about the $current_transaction_set variable?


Thanks again,


Jim Neff



JBryant@xxxxxxxxx wrote:

Hi, James,

Did you change companies? I recall your e-mail used to be something else (or perhaps I mis-remember).

Anyway, you can use the xsl:number instruction to get what you want:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

 <xsl:template match="/">
   <xsl:number select="transaction_set/segment[@type='HL']"/>
 </xsl:template>

</xsl:stylesheet>

Just tested it with Saxon 8.4 and got 3.

Jay Bryant
Bryant Communication Services
(presently consulting at Synergistic Solution Technologies)




James Neff <jneff@xxxxxxxxxxxxxxxx> 07/29/2005 01:08 PM
Please respond to
xsl-list@xxxxxxxxxxxxxxxxxxxxxx



To XSL list <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> cc

Subject
[xsl] find position of first occurrence in a node set






Greetings,


I have a node set that looks like this:

<transaction_set>

 <segment type='SL'>
   A
 </segment>

 <segment type='GS'>
   B
 </segment>

 <segment type='HL'>
   C
 </segment>

 <segment type='PR'>
   D
 </segment>

....

</transaction_set>


I need to find the position of the first <segment> element that has the type of 'HL'. So for my example above it should return 3.



Thanks you in advance,

Current Thread