Re: [xsl] Grouping by attribute

Subject: Re: [xsl] Grouping by attribute
From: Jostein Austvik Jacobsen <josteinaj@xxxxxxxxx>
Date: Tue, 20 Oct 2009 00:08:37 +0200
Thanks! I've been testing it a bit now and it works as expected.

I'm having a little trouble mixing it with some of my other templates
used on other parts of the document but I'll probably figure it out.
Or else, I'll ask.

Regards
Jostein

2009/10/19 Michael Kay <mike@xxxxxxxxxxxx>:
> The essence of the solution is
>
> <xsl:template match="contentSection">
>  <h1>Title</h1>
>  <xsl:for-each-group select="*" group-starting-with="headline">
>    <xsl:choose>
>      <xsl:when test="headline">
>        <level2>
>          <xsl:apply-templates select="current-group()"/>
>        </level2>
>      </xsl:when>
>      <xsl:otherwise>
>        <xsl:apply-templates select="current-group()"/>
>      </xsl:otherwise>
>    </
>  </
> </
>
> Regards,
>
> Michael Kay
> http://www.saxonica.com/
> http://twitter.com/michaelhkay
>
>> -----Original Message-----
>> From: Jostein Austvik Jacobsen [mailto:josteinaj@xxxxxxxxx]
>> Sent: 19 October 2009 13:18
>> To: xsl-list
>> Subject: [xsl] Grouping by attribute
>>
>> I've got this flat-structured XML:
>>
>> <document>
>>   <metaData>
>>     <title>Title</title>
>>     <publisher>Publisher</publisher>
>>   </metaData>
>>   <contentSection>
>>     <p>text</p>
>>
>>     <headline level="2">Headline</headline>
>>     <p>text</p>
>>     <p>text</p>
>>
>>     <headline level="2">Section</headline>
>>     <p>text</p>
>>     <pagenum id="page2"/>
>>     <p>text</p>
>>     <headline level="3">Subsection</headline>
>>     <p>text</p>
>>
>>     <headline level="2">Section</headline>
>>     <p>text</p>
>>     <p>text</p>
>>   </contentSection>
>> </document>
>>
>> And want it transformed to this XML:
>>
>> <body>
>>   <level1>
>>     <h1>Title</h1>
>>     <p>text</p>
>>
>>     <level2>
>>       <h2>Headline</h2>
>>       <p>text</p>
>>       <p>text</p>
>>     </level2>
>>
>>     <level2>
>>       <h2>Section</h2>
>>       <p>text</p>
>>       <pagenum id="page2"/>
>>       <p>text</p>
>>       <level3>
>>         <h3>Subsection</h3>
>>         <p>text</p>
>>       </level3>
>>     </level2>
>>
>>     <level2>
>>       <h2>Section</h2>
>>       <p>text</p>
>>       <p>text</p>
>>     </level2>
>>   </level1>
>> </body>
>>
>> How would I do that using XSLT? XSLT 2.0 solutions are ok.
>>
>> Regards
>> Jostein

Current Thread