[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: find position of first occurrence in a node set

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

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.