Mike,
Thank you for your response. I got another issue,though.
I have the template like this:
<xsl:template match="foo">
<table>
<xsl:for-each select="bar">
<xsl:sort select="@id" data-type="number"/>
<xsl:if test="(number(position()) mod 3) = 1">
<tr>
<td>
<xsl:value-of disable-output-escaping="yes"
select="someElement"/>
</td>
<td>
<xsl:for-each
select="following-sibling::bar[position()=1]">
<xsl:value-of
disable-output-escaping="yes" select="someElement"/>
</xsl:for-each>
</td>
<td>
<xsl:for-each
select="following-sibling::bar[position()=2]">
<xsl:value-of
disable-output-escaping="yes" select="someElement"/>
</xsl:for-each>
</td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</xsl:template>
As you see, I sorted bar based on some rule in for-each. When I get the next
two element, how can I keep
the order? Looks to me following-sibling fetch elements based on the orginal
order in the source
file.
Thank you.
LS
-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com]On Behalf Of
Mike Brown
Sent: Monday, June 23, 2003 10:04 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Looping in XSLT(old question, but maybe new problem)
Liu Shuai wrote:
Hi, all
I am trying to write a template that will generate a table based on a xml
file and right now I don't have any
clue how to do it.
If I have a source file looks like this
<foo>
<bar id='1'>
<someElement>a</someElement>
</bar>
<bar id='2'>
<someElement>b</someElement>
</bar>
<bar id='3'>
<someElement>c</someElement>
</bar>
<bar id='4'>
<someElement>d</someElement>
</bar>
<bar id='5'>
<someElement>e</someElement>
</bar>
...
</foo>
Can I write a style sheet that will transform the source file above to a
html table like this?
<table>
<tr>
<td>a</td>
<td>b</td>
<td>c</td>
</tr>
<tr>
<td>d</td>
<td>e</td>
<td> </td>
</tr>
...
</table>
Basicly, I want to generate N columns per row but I don't know how many
"bar"s I have in the source file.
Select all bar elements for processing.
In the template that matches a bar element, if position() returns
a value that when divided by 3 has a remainder of 1, generate a table row
element. Inside that element, create cells for the current node and its
first two following siblings.
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list