Subject: Re: Add a level of structure?
From: "Sam D. Chuparkoff" <sdc@xxxxxxxxxx>
Date: Mon, 20 Jun 2005 03:39:42 -0700
|
On Mon, 2005-06-20 at 09:32 +0300, George Cristian Bina wrote:
> Hi Edmund,
>
> You can use something like below:
>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> version="2.0">
> <xsl:output indent="yes"/>
> <xsl:template match="a">
> <foo>
> <xsl:apply-templates/>
> </foo>
> </xsl:template>
> <xsl:template match="b">
> <bar>
> <xsl:variable name="sortedCs">
> <xsl:for-each select="c">
> <xsl:sort select="c1" data-type="number"/>
> <xsl:copy-of select="."/>
> </xsl:for-each>
> </xsl:variable>
George is right, you'll want to take two passes at those <c> s. After
that, you just need to go with:
<baz>
<x att="val" att2="val2"/>
<y att="val" att2="val2"/>
<xsl:apply-templates select="subsequence($sortedCs/*, 1, 3)"/>
</baz>
<baz>
<q att="val" att2="val2"/>
<r att="val" att2="val2"/>
<xsl:apply-templates select="subsequence($sortedCs/*, 4, 3)"/>
</baz>
<baz>
<g att="val" att2="val2"/>
<h att="val" att2="val2"/>
<xsl:apply-templates select="subsequence($sortedCs/*, 7, 3)"/>
</baz>
> <xsl:for-each select="$sortedCs/*">
> <xsl:if test="position() mod 3 =1">
> <baz>
> <xsl:call-template name="specificContent">
> <xsl:with-param name="pos" select="(position()-1) div 3"/>
> </xsl:call-template>
> <xsl:apply-templates select="."/>
> <xsl:apply-templates select="following-sibling::c[1]"/>
> <xsl:apply-templates select="following-sibling::c[2]"/>
> </baz>
> </xsl:if>
> </xsl:for-each>
> </bar>
> </xsl:template>
But you'll probably want to do something like the above someday soon.
sdc
| Current Thread |
Michael Kay - 15 Jun 2005 21:46:04 -0000
- John - 16 Jun 2005 14:25:03 -0000
|
|