Lainaus Joona Palaste <[EMAIL PROTECTED]>:
< On Mon, 9 Feb 2004, Kielen, Agnes wrote:
<
< > Try:
< >
< > <xsl:stylesheet version="1.0"
< xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
< > <xsl:template match="/document">
< > <document>
< > <xsl:for-each select="node[(position() mod 2) = 1]">
< > <group>
< > <xsl:copy-of select=". | following-sibling::node[1]"/>
< > </group>
< > </xsl:for-each>
< > </document>
< > </xsl:template>
< >
< > </xsl:stylesheet>
<
< Thanks for the advice. What if I want the number of <node> nodes to go
< to a single <group> node to depend on some attribute in the original XML
< document? Say, for example:
<
< <document>
< <nodes width="3">
< <node>1</node>
< <node>2</node>
< <node>3</node>
< <node>4</node>
< <node>5</node>
< <node>6</node>
< <node>7</node>
< <node>8</node>
< </nodes>
< </document>
Something like (not tested):
<xsl:template match="/document/nodes">
<xsl:variable name="module" select="@width"/>
<document>
<xsl:for-each select="node[(position() mod $module) = 1]">
<group>
<xsl:copy-of select=". |
following-sibling::node[position()<$module]"/>
</group>
</xsl:for-each>
</document>
</xsl:template>
<
< How can I make this transform to this?
<
< <document>
< <group>
< <node>1</node>
< <node>2</node>
< <node>3</node>
< </group>
< <group>
< <node>4</node>
< <node>5</node>
< <node>6</node>
< </group>
< <group>
< <node>7</node>
< <node>8</node>
< </group>
< </document>
<
< In other words, the "length" attribute defines how many <node> nodes go
< under a single <group> node. If there are not enough nodes, then all
< that are left are used. Is this possible in XSLT?
<
< Joona Palaste
< [EMAIL PROTECTED]
<
<
<
***************************************************
* Jarkko Moilanen *
* Dokumentoinnin kehitt�j� *
* Profound XML technology Expert *
* DokuMentori Oy *
* www.dokumentori.fi *
***************************************************