Re: [xsl] Problem for : increment a variable in a for-each?

Subject: Re: [xsl] Problem for : increment a variable in a for-each?
From: Markus Vaterlaus <mvaterlaus@xxxxxxxxx>
Date: Fri, 26 Nov 2004 10:33:02 +0100
Hello,

may be I'm a bit clueless, but I can't figure out why you do all the
counting stuff. Have you tried  XPath expressions with predicates? I
guess, the following does what you are looking for.

Markus

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
	<xsl:template match="/">
				<xsl:apply-templates/>
	</xsl:template>
<!-- the last one has to be <strong/> -->
	<xsl:template match="list[position() =last() and ParentID = '21']">
		<strong>
			<xsl:value-of select="Title"/>
		</strong>
	</xsl:template>
<!-- the second one has to be <italic/> -->
	<xsl:template match="list[position() = '2' and ParentID = '21']">
		<italic>
			<xsl:value-of select="Title"/>
		</italic>
	</xsl:template>
<!-- and another matcher... -->
	<xsl:template match="list[position() !=last() and ParentID = '21']">
		<whatever>
			<xsl:value-of select="Title"/>
		</whatever>
	</xsl:template>
</xsl:stylesheet>



On Thu, 25 Nov 2004 22:52:07 -0500 (EST), que Li <queincanada@xxxxxxxx>
wrote:
> Hi:
>
> I found several people asked the same question with me
> "Re: [xsl] how to increment a variable in a for-each
> loop" but it really didn't resolve my problems. So
> just wonder could I get help ? I spent lots of time on
> it and can't get solution!
>
> My xml file
> <root>
> <list>
>     <ID>21</ID>
>    <Title>text1</Title>
>    <ParentID>1<ParentID>
> </list>
> <list>
>     <ID>22</ID>
>    <Title>text2</Title>
>    <ParentID>21<ParentID>
> </list>
>
> <list>
>     <ID>23</ID>
>    <Title>text3</Title>
>    <ParentID>21<ParentID>
> </list>
>
> <list>
>     <ID>24</ID>
>    <Title>text4</Title>
>    <ParentID>21<ParentID>
> </list>
>
> <list>
>     <ID>25</ID>
>    <Title>text5</Title>
>    <ParentID>1<ParentID>
> </list>
>
> </root>
>
> What I want do: I need do different thing  for the
> node which  parentID is 21(by passing in )(exampel:If
> it is first child then I need bold. if not first and
> not last one then I need do second thing. If the node
> is last child then I need do third things.
>
> I try to use the call:template and xsl:for each to
> pass the parameter but the count is always set to
> initial since I run so many for each
> what I shoud do ?
>
> My code
>
> <xsl:template match="root">
>
> <xsl:for each select="list">
>
> <xsl:if test="parented =1">
>
> <xsl:call-template name= !0findChildNode!1>
>
>   <xsl:with-param name=!1ID!1 select="ID!1/>
>
> </xsl:call-template>
>
> </xsl:for-each>
>
> </xsl:template>
>
> <xsl:template name="findChildNode!1>
>
> <xsl:param name="ID!1>
>
> <xsl:param name="count!1 select="0!1/>
>
> <xsl:for-each select="../list!1>
>
>    <xsl:if test="parentID=$ID!1>
>
>     <xsl:call-template  name="formatChild!1>
>
> <xsl:with-param name="count" select="$count+1!1/>
>
>    </xsl:if>
>
> </xsl:for each>
>
> </xsl:template>
>
> <xsl:template name="formatChid!1>
>
>    <xsl:param name="count!1>
>
> <xsl:variable name="TotalChildCount!1 select=!1?!1/>
> (Note: I don't know how I can get all child node count
> based on the one parentID)
>
>             <xsl:choose>
>
> <xsl:when  test="$count=1!1>do firsth thing</xsl:when>
> <xsl:when  test="$count &gt; 1 and $count &lt;
> $TotalChildCount!1>do second  thing</xsl:when>
>
> <xsl:when  test="$count=$TotalCount!1>do third
> thing</xsl:when>
>
>           </xsl:choose>
>
> </xsl:template>
>
> Question:
>
>  1.   Why every time the $count is 0 and never
> incresement  ?
> 2.   How I can get the total child count value based
> on the parent ID?
>
> Thanks for any help
> Helena
>
> ______________________________________________________________________
> Post your free ad now! http://personals.yahoo.ca

Current Thread
  • [xsl] four time post:
    • que Li - Thu, 25 Nov 2004 22:46:00 -0500 (EST)
      • que Li - Thu, 25 Nov 2004 22:52:07 -0500 (EST)
        • Markus Vaterlaus - Fri, 26 Nov 2004 10:33:02 +0100 <=
        • Andy Dent - Sat, 27 Nov 2004 10:17:38 +0800
      • Michael Kay - Fri, 26 Nov 2004 10:10:50 -0000
        • que Li - Fri, 26 Nov 2004 13:20:04 -0500 (EST)