|
Subject: [xsl] for-each-group - only get elements in each group From: "Rick Quatro rick@xxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Wed, 20 Jan 2016 17:35:18 -0000 |
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>
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] X is for XSLT, BR Chrisman brchrism | Thread | Re: [xsl] for-each-group - only get, David Carlisle d.p.c |
| Re: [xsl] X is for XSLT, Debbie Lapeyre dalap | Date | Re: [xsl] for-each-group - only get, David Carlisle d.p.c |
| Month |