[xsl] Grouping using concatenated key

Subject: [xsl] Grouping using concatenated key
From: jmcreynolds@xxxxxxxxxxxxxx
Date: Mon, 11 Dec 2006 09:39:35 -0600 (CST)
All,

I have been wrestling with this problem for about 3 days now.  I have
looked at the examples that Jenni has provided, but I am just not getting
it quite right.



Here is some example XML that I am using:



<BillDetail>

    <BILLING_DT>2006-12-01T00:00:00-06:00</BILLING_DT>

    <BILL_TO_ACCT_ID>11111</BILL_TO_ACCT_ID>

    <ACCT_ID>13893</ACCT_ID>

    <PHONE_NUMBER>1234567890</PHONE_NUMBER>

    <TO_NUMBER>9876543210</TO_NUMBER>

    <TO_CITY>CREVE COEU</TO_CITY>

    <TO_STATE>MO</TO_STATE>

    <RATE_PERIOD>1</RATE_PERIOD>

    <RATE_PERIOD_NAME>Day</RATE_PERIOD_NAME>

    <MINUTES>1</MINUTES>

    <AMOUNT>0.22</AMOUNT>

    <DISCOUNTED_AMT>0.09</DISCOUNTED_AMT>

    <SURCHARGE_AMT>0</SURCHARGE_AMT>

    <FEDERAL_TAX>0</FEDERAL_TAX>

    <STATE_TAX>0</STATE_TAX>

    <COUNTY_TAX>0</COUNTY_TAX>

    <CITY_TAX>0</CITY_TAX>

    <FROM_NUMBER>1234567890</FROM_NUMBER>

    <FROM_CITY>NEW HAVEN </FROM_CITY>

    <FROM_STATE>MO</FROM_STATE>

    <SOURCE>TCSI</SOURCE>

    <CIC_ID>444</CIC_ID>

    <CALL_DATE_TIME>2006-11-02T14:43:30-06:00</CALL_DATE_TIME>

    <CALL_MINUTES>0</CALL_MINUTES>

    <CALL_SECONDS>42</CALL_SECONDS>

    <BATCH_ID>987</BATCH_ID>

    <CALL_ID>135</CALL_ID>

    <CATEGORY>1</CATEGORY>

    <GROUP_NO>1</GROUP_NO>

    <ID_NO>1</ID_NO>

    <EMR_MESSAGE_TYPE_ID>1</EMR_MESSAGE_TYPE_ID>

    <SETTLEMENT_CODE>8</SETTLEMENT_CODE>

    <METHOD_OF_RECORDING>2</METHOD_OF_RECORDING>

    <RATE_CLASS>4</RATE_CLASS>

    <INDICATORS>000000000000000000500000000000</INDICATORS>

    <DISCOUNT_PLAN_IND>*</DISCOUNT_PLAN_IND>

    <BILL_GROUP_ID>24</BILL_GROUP_ID>

    <SERV_RATE_CODE>FLTAMBVD</SERV_RATE_CODE>

    <CALL_INDICATOR_ID>26</CALL_INDICATOR_ID>

    <ACCT_DISPLAY_ORDER>6</ACCT_DISPLAY_ORDER>

    <OBLIGATION_ID>2345</OBLIGATION_ID>

    <FRANCH_TAX>0</FRANCH_TAX>

  </BillDetail>

  <BillDetail>

    <BILLING_DT>2006-12-01T00:00:00-06:00</BILLING_DT>

    <BILL_TO_ACCT_ID>11111</BILL_TO_ACCT_ID>

    <ACCT_ID>13893</ACCT_ID>

    <PHONE_NUMBER>4567891230</PHONE_NUMBER>

    <TO_NUMBER>3216549870</TO_NUMBER>

    <TO_CITY>WASHINGTON</TO_CITY>

    <TO_STATE>MO</TO_STATE>

    <RATE_PERIOD>1</RATE_PERIOD>

    <RATE_PERIOD_NAME>Day</RATE_PERIOD_NAME>

    <MINUTES>1</MINUTES>

    <AMOUNT>0.22</AMOUNT>

    <DISCOUNTED_AMT>0.09</DISCOUNTED_AMT>

    <SURCHARGE_AMT>0</SURCHARGE_AMT>

    <FEDERAL_TAX>0</FEDERAL_TAX>

    <STATE_TAX>0</STATE_TAX>

    <COUNTY_TAX>0</COUNTY_TAX>

    <CITY_TAX>0</CITY_TAX>

    <FROM_NUMBER>7418529630</FROM_NUMBER>

    <FROM_CITY>NEW HAVEN </FROM_CITY>

    <FROM_STATE>MO</FROM_STATE>

    <SOURCE>TCSI</SOURCE>

    <CIC_ID>444</CIC_ID>

    <CALL_DATE_TIME>2006-11-03T09:46:04-06:00</CALL_DATE_TIME>

    <CALL_MINUTES>0</CALL_MINUTES>

    <CALL_SECONDS>24</CALL_SECONDS>

    <BATCH_ID>987</BATCH_ID>

    <CALL_ID>2812</CALL_ID>

    <CATEGORY>1</CATEGORY>

    <GROUP_NO>1</GROUP_NO>

    <ID_NO>1</ID_NO>

    <EMR_MESSAGE_TYPE_ID>1</EMR_MESSAGE_TYPE_ID>

    <SETTLEMENT_CODE>8</SETTLEMENT_CODE>

    <METHOD_OF_RECORDING>2</METHOD_OF_RECORDING>

    <RATE_CLASS>4</RATE_CLASS>

    <INDICATORS>000000000000000000500000000000</INDICATORS>

    <DISCOUNT_PLAN_IND>*</DISCOUNT_PLAN_IND>

    <BILL_GROUP_ID>24</BILL_GROUP_ID>

    <SERV_RATE_CODE>FLTAMBVD</SERV_RATE_CODE>

    <CALL_INDICATOR_ID>26</CALL_INDICATOR_ID>

    <ACCT_DISPLAY_ORDER>6</ACCT_DISPLAY_ORDER>

    <OBLIGATION_ID>00000000</OBLIGATION_ID>

    <FRANCH_TAX>0</FRANCH_TAX>

  </BillDetail>



These are just 2 dummied up records.  What I need to do is group these
records first by OBLIGATION_ID then by PHONENUMBER, and then display the
results.  Here is the key I am trying to use to accomplish this:



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



I have tried looping through the XML using this key to no avail.  Could
someone steer me in the right direction?



Basically, here is what I am wanting to see:



Begin loop

Calls for OBLIGATION_ID

.

.

.

Calls for PHONE_NUMBER (that has the same OBLIGATION_ID from above)

End Loop



I need to loop through all <BillDetail> nodes, breaking it down by
OBLIGATION_ID, then beneath each OBLIGATION_ID, I need to break it down by
PHONE_NUMBER.



This is my first project using XSLTand I am enjoying it greatly.  If I
could only get over this one hump



Many thanks in advance,



JOHN

Current Thread