[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Thanks Andrew.
I was trying to do it the other way round (only select pairs that could be used) rather than find all and filter out the unacceptable combos.
Cheers
On 08/15/2011 05:37 PM, Andrew Welch wrote:
Re: [xsl] Grouping problem
Subject: Re: [xsl] Grouping problem From: "graham.heath" <graham.heath@xxxxxxxxx> Date: Mon, 15 Aug 2011 18:45:16 +0200 |
Thanks Andrew.
I was trying to do it the other way round (only select pairs that could be used) rather than find all and filter out the unacceptable combos.
Cheers
On 08/15/2011 05:37 PM, Andrew Welch wrote:
Ok I've hacked this together, it gets all possible combos then filters them down:
<xsl:variable name="pairs" select="//pair"/>
<xsl:variable name="combos" as="element(table)*"> <xsl:for-each select="$pairs"> <xsl:variable name="outer" select="."/> <xsl:for-each select="$pairs[not(. is $outer)]"> <table> <xsl:for-each select="$outer, ."> <xsl:sort select="."/> <xsl:copy-of select="."/> </xsl:for-each> </table> </xsl:for-each> </xsl:for-each> </xsl:variable>
<xsl:template match="/"> <root> <xsl:for-each-group select="$combos[count(distinct-values(.//player)) = 4]" group-by="."> <xsl:copy-of select="."/> </xsl:for-each-group> </root> </xsl:template>
On 15 August 2011 16:00, graham.heath<graham.heath@xxxxxxxxx> wrote:Okay Andrew,
I forgot to write out all the permutations :-) You could say that the example was cut down a tad too far.. <table>
<pair> <player>player1</player> <player>player4</player> </pair> <pair> <player>player2</player> <player>player3</player> </pair> </table>
In your example output, where should the pair:<pair> <player>player1</player> <player>player4</player> </pair>
go?
On 15 August 2011 14:38, graham.heath<graham.heath@xxxxxxxxx> wrote:Hello mega brains,
I have an xml grouping problem that has so far defeated me.
Given the xml <pairings> <pair> <player>player1</player> <player>player2</player> </pair> <pair> <player>player1</player> <player>player3</player> </pair> <pair> <player>player1</player> <player>player4</player> </pair> <pair> <player>player2</player> <player>player3</player> </pair> <pair> <player>player2</player> <player>player4</player> </pair> <pair> <player>player3</player> <player>player4</player> </pair> </pairings>
is it possible to group pairs such that each player occurs only once in each group? <table> <pair> <player>player1</player> <player>player2</player> </pair> <pair> <player>player3</player> <player>player4</player> </pair> </table> <table> <pair> <player>player1</player> <player>player3</player> </pair> <pair> <player>player2</player> <player>player4</player> </pair> </table>
I was of the opinion that some form of xsl:for-each-group would suffice but have been unable to devise a group-by expression that works.. <xsl:for-each-group select="pairings/pair" group-by="count(distinct-values(player))=1"> <table> <xsl:apply-templates select="current-group() "/> </table> </xsl:for-each-group>
Many thanks
Hector
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Grouping problem, Andrew Welch | Thread | Re: [xsl] Grouping problem, G. Ken Holman |
Re: [xsl] Grouping problem, Andrew Welch | Date | [xsl] using OR in a group-ending-wi, Jeff Wilson |
Month |
Keywords