Subject: Re: Re[2]: [xsl] not standart table in stylesheet, need advise From: Kevin Jones <kjones@xxxxxxxxxxx> Date: Fri, 28 Feb 2003 13:52:22 +0000 |
On Friday 28 February 2003 11:45, Andrey Solonchuk wrote: Cut... > > But i have question with variables > > <xsl:variable name="flag1" select="list[@flag=2]"/> > <xsl:variable name="flag2" select="list[@flag=1]"/> > > how I can write xsl:for-each on the longest nodelist > > I tried next, but it give me an error > Can not convert #RTREEFRAG to a Nodelist > > <xsl:variable name="loop"> > <xsl:choose> > <xsl:when test="count($flag1) > count($flag2)"> > <xsl:value-of select="$flag1"/> > </xsl:when> > <xsl:otherwise> > <xsl:value-of select="$flag2"/> > </xsl:otherwise> > </xsl:choose > </xsl:variable> > <xsl:for-each select="$loop"> .... To get rid of the error you need to use a nodeset() extention function. Something like this should work, <xsl:for-each select="xalan:nodeset($loop)"> The problem is that 'loop' is a result tree fragment (RTF) which is different sort of data type than a nodeset (what you get from a select="..."). In XSLT 1.0 you can't convert from a RTF to a nodeset but most processors allow it via a nodeset() extention function. Having said that I don't think this is quite what you want as 'loop' is going to contain the string value of the first node, this is what 'value-of' does. You could replace 'value-of' by 'copy-of' to actually copy the nodes but that can be slow if you have large documents. The only other solution I can think of is to do somthing like this, <xsl:for-each select="/root/list"> <xsl:variable name="i" select="position()"/> <xsl:if test="$flag1[position()==$i] or $flag2[position()==$i]"> <tr> <th><xsl:value-of select="$flag1[position()=$i]/code-pMT"/></th> <th><xsl:value-of select="$flag1[position()=$i]/sname"/></th> <th><xsl:value-of select="$flag1[position()=$i]/sum-amt"/></th> <th><xsl:value-of select="$flag1[position()=$i]/days"/></th> <th><xsl:value-of select="$flag2[position()=$i]/code-pMT"/></th> <th><xsl:value-of select="$flag2[position()=$i]/sname"/></th> <th><xsl:value-of select="$flag2[position()=$i]/sum-amt"/></th> </tr> </xsl:if> </xsl:for-each> This will loop more than you need but only output data for rows where you have data to be shown. This eliminates the need for doing a length test at the cost of some redundant computation. Kev. XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] not standart table in sty, Kevin Jones | Thread | RE: [xsl] not standart table in sty, Americo Albuquerque |
RE: [xsl] Re: The Perils of Sudden , bryan | Date | [xsl] Re: Sort question, Tom Whitehouse |
Month |