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 > 1 and $count < > $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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Problem for : increment a var, que Li | Thread | Re: [xsl] Problem for : increment a, Andy Dent |
Re: [xsl] Counting with two conditi, Richard Lewis | Date | Re: [xsl] Counting with two conditi, Sven Waibel |
Month |