[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] for-each-group - only get elements in each group


Subject: Re: [xsl] for-each-group - only get elements in each group
From: "David Carlisle d.p.carlisle@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 20 Jan 2016 17:39:50 -0000

sorry about that, reply was nonsense:-) will post again when awake...

David




On 20 January 2016 at 17:35, Rick Quatro rick@xxxxxxxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

> Hi, I have this XML:
>
> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
> <Cases>
>   <Story>
>     <Category>Category1</Category>
>     <Case>Case1</Case>
>     <Category>Category1</Category>
>     <Case>Case2</Case>
>     <Category>Category1</Category>
>     <Case>Case3</Case>
>     <Category>Category1</Category>
>     <Case>Case4</Case>
>     <Category>Category2</Category>
>     <Case>Case5</Case>
>     <Category>Category2</Category>
>     <Case>Case6</Case>
>     <Category>Category2</Category>
>     <Case>Case7</Case>
>     <Category>Category2</Category>
>     <Case>Case8</Case>
>   </Story>
> </Cases>
>
> I want to group on each unique <Category> element and then only include the
> <Case> elements for each <Category>. Here is what I need:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <cases>
>    <category>Category1</category>
>    <Case>Case1</Case>
>    <Case>Case2</Case>
>    <Case>Case3</Case>
>    <Case>Case4</Case>
>    <category>Category2</category>
>    <Case>Case5</Case>
>    <Case>Case6</Case>
>    <Case>Case7</Case>
>    <Case>Case8</Case>
> </cases>
>
> However, I am getting this:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <cases>
>    <category>Category1</category>
>    <Case>Case1</Case>
>    <Case>Case2</Case>
>    <Case>Case3</Case>
>    <Case>Case4</Case>
>    <Case>Case5</Case>
>    <Case>Case6</Case>
>    <Case>Case7</Case>
>    <Case>Case8</Case>
>    <category>Category2</category>
>    <Case>Case1</Case>
>    <Case>Case2</Case>
>    <Case>Case3</Case>
>    <Case>Case4</Case>
>    <Case>Case5</Case>
>    <Case>Case6</Case>
>    <Case>Case7</Case>
>    <Case>Case8</Case>
> </cases>
>
> Here is my 2.0 stylesheet. Thanks in advance for any help. -Rick
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>     xmlns:xs="http://www.w3.org/2001/XMLSchema"
>     exclude-result-prefixes="xs"
>     version="2.0">
>
>     <xsl:output method="xml" indent="yes"/>
>     <xsl:strip-space elements="*"/>
>
>     <xsl:template match="/">
>         <cases><xsl:apply-templates select="Cases"/></cases>
>     </xsl:template>
>
>     <xsl:template match="Cases">
>         <xsl:for-each-group select="Story" group-by="Category">
>             <category><xsl:copy-of
> select="current-grouping-key()"/></category>
>             <xsl:apply-templates select="Case"/>
>         </xsl:for-each-group>
>     </xsl:template>
>
>     <xsl:template match="Case">
>         <Case><xsl:value-of select="."/></Case>
>     </xsl:template>
>
> </xsl:stylesheet>
> 
>



-- 
http://dpcarlisle.blogspot.com/


Current Thread