xsl-list
[Top] [All Lists]

[xsl] nested grouping problem

2010-10-04 10:13:11
I have the following incoming xml:

<summary>
  <codeSum main="14" exp="A">(14) Writing:</codeSum>
  <codeSum main="14" exp="A">(14) Writing:</codeSum>
  <codeSum main="14" exp="C">(14) Writing:</codeSum>
  <codeSum main="14" exp="C">(14) Writing:</codeSum>
  <codeSum main="14" exp="C">(14) Writing:</codeSum>
  <codeSum main="14" exp="C">(14) Writing:</codeSum>
  <codeSum main="14" exp="D">(14) Writing:</codeSum>
  <codeSum main="14" exp="D">(14) Writing:</codeSum>
  <codeSum main="14" exp="D">(14) Writing:</codeSum>
  <codeSum main="14" exp="D">(14) Writing:</codeSum>
  <codeSum main="14" exp="E">(14) Writing:</codeSum>
  <codeSum main="14" exp="E">(14) Writing:</codeSum>
  <codeSum main="17" exp="A">(17) Expository:</codeSum>
  <codeSum main="17" exp="A">(17) Expository:</codeSum>
  <codeSum main="17" exp="A">(17) Expository:</codeSum>
  <codeSum main="19" exp="A">(19) Conventions:</codeSum>
  <codeSum main="19" exp="A">(19) Conventions:</codeSum>
  <codeSum main="22" exp="A">(22) Research:</codeSum>
  <codeSum main="22" exp="A">(22) Research:</codeSum>
  <codeSum main="22" exp="A">(22) Research:</codeSum>
  <codeSum main="22" exp="A">(22) Research:</codeSum>
</summary>

I am processing this with the following nested grouping template:

    <xsl:template match="summary">
        <summary><textBold>Areas:</textBold><xsl:for-each-group 
select="codeSum" group-by="@main">
            <xsl:value-of select="."/><xsl:text> </xsl:text>
            <xsl:for-each-group select="current-group()" group-by="@exp">
                <xsl:choose>
                <xsl:when test="position()!=last()">
                    <xsl:value-of select="current-grouping-key()"/><xsl:text>, 
</xsl:text>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="current-grouping-key()"/><xsl:text>  
</xsl:text>
                </xsl:otherwise>
            </xsl:choose>
            </xsl:for-each-group>
        </xsl:for-each-group>
            </summary>
    </xsl:template>

with this result:

<summary><textBold>Areas:</textBold>    (14) Writing: A, C, D, E  (17) 
Expository: A  (19) Conventions: A  (22) Research: A  </summary>

I would like to add a semicolon after the last letter (@exp) listed after each 
area except for the last area in the list:

<summary><textBold>Areas:</textBold>    (14) Writing: A, C, D, E; (17) 
Expository: A; (19) Conventions: A; (22) Research: A  </summary>

Is this possible inside one template? I have always grouped from the outside 
in, so to speak. In this case it seems that I would need to first group the 
@main[(_at_)exp], then group @main. 

Otherwise I will need to leave some kind of element or attribute and take 
another pass through the summary to add the semicolons. Or perhaps this is a 
candidate for named template call, which is an approach that I am still fuzzy 
on.

Any help would be most appreciated.

Terry










--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>