Altova Mailing List Archives>Archive Index >xsl-list Archive Home >Recent entries >Thread Prev - Re: [xsl] find position of first occurrence in a node set [Thread Next] Re: [xsl] find position of first occurrence in a node setTo: Date: 8/2/2005 5:25:00 PM 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, | ||||||
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | Mobile | Full Site | |||
|
