|
Subject: Re: [xsl] copying complete document, but sort specific childnodes From: Martin Honnen <Martin.Honnen@xxxxxx> Date: Fri, 04 Sep 2009 14:52:51 +0200 |
my source document:
<document> <group id="group_abc123"> <item id="123456" sort-order="2"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> <item id="123456" sort-order="1"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> <item id="123456" sort-order="3"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> <group id="group_def123"> <item id="123456" sort-order="2"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> <item id="123456" sort-order="1"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> <item id="123456" sort-order="3"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> <item id="123456" sort-order="4"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> </group> <item id="123456" sort-order="4"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> </group> <group id="group_abc456"> <item id="123456" sort-order="2"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> <item id="123456" sort-order="1"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> <item id="123456" sort-order="3"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> <item id="123456" sort-order="4"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> </group> </document>
expected result:
<?xml version="1.0" encoding="UTF-8"?> <document> <group id="group_abc123"> <item id="123456" sort-order="1"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> <item id="123456" sort-order="2"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> <item id="123456" sort-order="3"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> <group id="group_def123"> <item id="123456" sort-order="1"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> <item id="123456" sort-order="2"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> <item id="123456" sort-order="3"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> <item id="123456" sort-order="4"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> </group> <item id="123456" sort-order="4"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> </group> <group id="group_abc456"> <item id="123456" sort-order="1"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> <item id="123456" sort-order="2"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> <item id="123456" sort-order="3"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> <item id="123456" sort-order="4"> <childitem id="bar">foo</childitem> <childitem id="text">1</childitem> </item> </group> </document>
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output indent="yes"/> <xsl:strip-space elements="*"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template> <xsl:template match="group">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:for-each-group select="*" group-adjacent="exists(@sort-order)">
<xsl:choose>
<xsl:when test="current-grouping-key()">
<xsl:apply-templates select="current-group()">
<xsl:sort select="@sort-order" data-type="number"/>
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>Martin Honnen http://msmvps.com/blogs/martin_honnen/
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] copying complete document, bu, Marc Harding | march | Thread | [xsl] passing a regex matched subst, Manuel Souto Pico |
| Re: [xsl] "Higher Order Functions f, Florent Georges | Date | Re: [xsl] How did you learn XSL?, Florent Georges |
| Month |