David has given both a 2.0 and a 1.0 solution. I wouldn't write
anything different for what David wrote for XSLT 2.0.
But here's a slightly different 1.0 solution,
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="x">
<result>
<xsl:apply-templates select="field[heading]" mode="a" />
</result>
</xsl:template>
<xsl:template match="field" mode="a">
<fieldset>
<legend><xsl:value-of select="heading" /></legend>
<xsl:apply-templates select="following-sibling::field[1][text]"
mode="b" />
</fieldset>
</xsl:template>
<xsl:template match="field" mode="b">
<p><xsl:value-of select="text" /></p>
<xsl:apply-templates select="following-sibling::field[1][text]"
mode="b" />
</xsl:template>
</xsl:stylesheet>
this is popularly known as the sibling recursion technique.
Cheers,
Mukul
On Nov 19, 2:40*am, "Hvid Hat" <hvid....@please-no-mail.thxwrote:
Hi
Can anyone help me with the following transition? My problem is how to create
a fieldset each time I run into a heading and then include the following text
elements within the fieldset.
<?xml version="1.0" encoding="ISO-8859-1"?>
<field>
* <heading>First heading</heading>
</field>
<field>
* <text>Lorem</text>
</field>
<field>
* <text>Ipsum</text>
</field>
<field>
* <heading>Second heading</heading>
</field>
<field>
* <text>Dolor</text>
</field>
<field>
* <text>Sit</text>
</field>
<field>
* <heading>Third heading</heading>
</field>
<field>
* <text>Amet</text>
</field>
To
<fieldset>
* <legend>First heading</legend>
* <p>Lorem</p>
* <p>Ipsum</p>
</fieldset>
<fieldset>
* <legend>Second heading</legend>
* <p>Dolor</p>
* <p>Sit</p>
</fieldset>
<fieldset>
* <legend>Third heading</legend>
* <p>Amet</p>
</fieldset>