Re: [xsl] Grouping using concatenated key

Subject: Re: [xsl] Grouping using concatenated key
From: jmcreynolds@xxxxxxxxxxxxxx
Date: Mon, 11 Dec 2006 10:13:46 -0600 (CST)
Sorry for being thick headed...and I am not looking for anyone to write my
code for me.  But being so new to XSLT I have a ton of questions, this
just being the current hurdle.

David, I did as you instructed.  See my XSL file below:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
    xmlns:dt="http://xsltsl.org/date-time";>
  <xsl:import href="http://xsltsl.sourceforge.net/modules/stdlib.xsl"/>

  <xsl:key name="byObligationAndPhone" match="BillDetail"
use="concat(OBLIGATION_ID, PHONE_NUMBER)" />
  <xsl:key name="byObligation" match="BillDetail" use="OBLIGATION_ID" />

    <!--
        This is an XSLT template file. Fill in this area with the
        XSL elements which will transform your XML to XHTML.
    -->
  <xsl:template match="/">
    <table border="1">
      <tr>
        <th>OBLIGATION_ID</th>
        <th>PHONE_NUMBER</th>
      </tr>
      <xsl:for-each
select="BillDetail[generate-id()=generate-id(key('byObligation',OBLIGATION_ID))]">
      Calls for <xsl:value-of select="OBLIGATION_ID"/>
      <!-- now further group this by phone -->
      <xsl:variable name="OBLIGATION" select="OBLIGATION_ID"/>
      <xsl:for-each
select="../BillDetail[generate-id()=generate-id(key('byObligationAndPhone',concat($OBLIGATION,PHONE_NUMBER)))]">
        <tr>
          <td>
            <xsl:value-of select="OBLIGATION_ID"/>
          </td>
          <td>
            <xsl:value-of select="PHONE_NUMBER"/>
          </td>
        </tr>
      whatever
      ...
      </xsl:for-each>
    </xsl:for-each>
    </table>
    </xsl:template>
</xsl:stylesheet>

All that gets displayed is just the <th> tags...no data.

Again, I am sorry that I am so green to all of this.  In just a few days
of messing around with this technology, I am wishing I had this knowledge
in my "toolkit" many moons ago...

Many thanks again!

JOHN


>
> assuming thi sis xslt1, you need two keys
> 1st level
>
> <xsl:key name="byObligation" match="BillDetail" use="OBLIGATION_ID" />
> second
>
> <xsl:key name="byObligationAndPhone" match="BillDetail"
> use="concat(OBLIGATION_ID, PHONE_NUMBER)" />
>
>
> then just muenchian group as usual
>
> <xsl:for-each
> select="BillDetail[generate-id()=generate-id(key('byObligation',OBLIGATION_ID))]">
>  this is the group for <xsl:value-of select="OBLIGATION_ID"/>
>  now further group this by phone
>  <xsl:variable name="OBLIGATION" select="OBLIGATION_ID"/>
>  <xsl:for-each
>  select="../BillDetail[generate-id()=generate-id(key('byObligationAndPhone'
>          ,concat($OBLIGATION,PHONE_NUMBER)))]"/>
>   whatever
> ...
>
> David

Current Thread