Altova Mailing List Archives>Archive Index >microsoft.public.xsl Archive Home >Recent entries >Thread Prev - grouping parallel xml nodes? >Thread Next - Re: grouping parallel xml nodes? Re: grouping parallel xml nodes?To: NULL Date: 7/8/2006 2:02:00 PM
Raffy Gim wrote:
> <layout>
> <row type="1" name="one"/>
> <row type="9999" name="first spacer"/>
> <row type="2" name="two"/>
> <row type="3" name="three"/>
> <row type="7 name="seven"/>
> <row type="9999" name="second spacer"/>
> <row type="4" name="four"/>
> <row type="5" name="five"/>
> </layout>
>
> The xml I want to have from the original xml above is
> <layout>
> <group name="nogroup">
> <row type="1" name="one"/>
> </group>
> <group name="first spacer">
> <row type="2" name="two"/>
> <row type="3" name="three"/>
> <row type="7 name="seven"/>
> </group>
> <group name="second spacer">
> <row type="4" name="four"/>
> <row type="5" name="five"/>
> </group>
> </layout>
One way is to use
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="layout">
<xsl:copy>
<xsl:apply-templates select="@*" />
<xsl:apply-templates select="row[1]" />
</xsl:copy>
</xsl:template>
<xsl:template match="row[@type = '9999']">
<group name="{@name}">
<xsl:apply-templates select="following-sibling::row[1][@type !=
'9999']" mode="copy" />
</group>
<xsl:apply-templates select="following-sibling::row[@type =
'9999'][1]" />
</xsl:template>
<xsl:template match="row">
<group name="nogroup">
<xsl:copy>
<xsl:apply-templates select="@* " />
</xsl:copy>
</group>
<xsl:apply-templates select="following-sibling::row[1]" />
</xsl:template>
<xsl:template match="row" mode="copy">
<xsl:copy>
<xsl:apply-templates select="@*" />
</xsl:copy>
<xsl:apply-templates select="following-sibling::row[1][@type !=
'9999']" mode="copy" />
</xsl:template>
<xsl:template match="@*">
<xsl:copy />
</xsl:template>
</xsl:stylesheet>
--
Martin Honnen --- MVP XML
http://JavaScript.FAQTs.com/
| ||||||
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | Mobile | Full Site | |||
|
