xsl-list
[Top] [All Lists]

RE: Looping in XSLT(old question, but maybe new problem)

2003-06-23 21:17:26
Mike,

Thank you for your response. I got another issue.

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 sort bar based on some rule, but when I get the next two
element, how can I keep
the order? Looks to me following-sibling fetch element 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>&nbsp;</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