RE: [xsl] following-sibling:: within a for-each

Subject: RE: [xsl] following-sibling:: within a for-each
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 10 Oct 2005 16:06:21 +0100
You can test if you're at the last item using 

<xsl:if test="position()!=last()">,</xsl:if>

I would use a variable for the repeated expression /*/*[substring(name(),8)
= 'MeterPulse'].

You could do it using following-sibling but it's tortuous:

test="following-sibling::*[substring(name(),8) = 'MeterPulse']"

Michael Kay
http://www.saxonica.com/



 

> -----Original Message-----
> From: Khorasani, Houman [mailto:houman_khorasani@xxxxxxxxxxxxxx] 
> Sent: 10 October 2005 15:34
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] following-sibling:: within a for-each
> 
> Hello everyone,
> 
> This is the first time I am experimenting with following-sibling:: and
> am already stuck in here.
> 
> I have such a code here:
> 
> <xsl:if test="/*/*[substring(name(),8) = 'MeterPulse']">	
> 	<xsl:element name="MeterPulseFacility">			
> 		<xsl:for-each select="/*/*[substring(name(),8) =
> 'MeterPulse']">			<xsl:value-of select=" ...some
> calculations... "/>
> 			<xsl:text>,</xsl:text>
> 		</xsl:for-each>					
> 	</xsl:element>	
> </xsl:if>
> 
> The "...some calculations..." outputs a plain number.  Following the
> comma within the <xsl:text>,</xsl:text>
> 
> The output would be something like
> 3,2,1,
> 
> I wish to eliminate the last comma since there is no need for 
> a further
> separation.  I thought I could check if there actually is another
> incoming sibling in the for-each, if yes then set the comma 
> otherwise do
> not set the comma.
> 
> <xsl:if test="/*/*[substring(name(),8) = 'MeterPulse']">	
> 	<xsl:element name="MeterPulseFacility">			
> 		<xsl:for-each select="/*/*[substring(name(),8) =
> 'MeterPulse']">			<xsl:value-of select=" ...some
> calculations... "/>
> 			<xsl:if
> test="substring(following-sibling::node()/name(),8) = 'MeterPulse'">
> 			<xsl:text>,</xsl:text>
> 			</xsl:if>
> 		</xsl:for-each>					
> 	</xsl:element>	
> </xsl:if>
> 
> However the way I wrote it seems to be wrong:
> <xsl:if test="substring(following-sibling::node()/name(),8) =
> 'MeterPulse'">
> 
> Any comments please?
> 
> Many thanks,
> Houman

Current Thread