xsl-list
[Top] [All Lists]

[xsl] Grouping

2007-03-22 01:03:08
I've got the following (shortened) xml that I'm trying to group in a particular 
way so that I can graph the numbers as series.

<?xml version="1.0" encoding="us-ascii"?>
<xbrl xmlns="http://www.xbrl.org/2003/instance"; 
xmlns:link="http://www.xbrl.org/2003/linkbase"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; 
xmlns:bne2="http://www.bowne.com/xbrl2"; xmlns:bne="http://www.bowne.com/xbrl"; 
xmlns:iso4217="http://www.xbrl.org/2003/iso4217"; 
xmlns:xbrli="http://www.xbrl.org/2003/instance"; 
xmlns:usfr-pte="http://www.xbrl.org/us/fr/common/pte/2005-02-28";>
<link:schemaRef xlink:type="simple" xlink:href="z 
bne-schemas/bne-20060930.xsd"/>
<link:schemaRef xlink:type="simple" xlink:href="z 
bne-schemas/bne-ssu_xbrl.xsd"/>

<!--Element Section-->

<usfr-pte:AccountsPayable contextRef="BalanceAsOf_31Dec2005_Unaudited" 
unitRef="USD" decimals="INF">31089000</usfr-pte:AccountsPayable>
<usfr-pte:AccountsPayable contextRef="BalanceAsOf_30Sep2006_Unaudited" 
unitRef="USD" decimals="INF">34896000</usfr-pte:AccountsPayable>
<usfr-pte:AccountsReceivableTradeGross 
contextRef="BalanceAsOf_31Dec2005_Unaudited" unitRef="USD" 
decimals="INF">129002000</usfr-pte:AccountsReceivableTradeGross>
<usfr-pte:AccountsReceivableTradeGross 
contextRef="BalanceAsOf_30Sep2006_Unaudited" unitRef="USD" 
decimals="INF">157694000</usfr-pte:AccountsReceivableTradeGross>
<usfr-pte:AccountsReceivableTradeNet 
contextRef="BalanceAsOf_31Dec2005_Unaudited" unitRef="USD" 
decimals="INF">120450000</usfr-pte:AccountsReceivableTradeNet>
<usfr-pte:AccountsReceivableTradeNet 
contextRef="BalanceAsOf_30Sep2006_Unaudited" unitRef="USD" 
decimals="INF">147759000</usfr-pte:AccountsReceivableTradeNet>
<usfr-pte:AccumulatedComprehensiveIncome 
contextRef="BalanceAsOf_31Dec2005_Unaudited" unitRef="USD" 
decimals="INF">-2475000</usfr-pte:AccumulatedComprehensiveIncome>
<usfr-pte:AccumulatedComprehensiveIncome 
contextRef="BalanceAsOf_30Sep2006_Unaudited" unitRef="USD" 
decimals="INF">-976000</usfr-pte:AccumulatedComprehensiveIncome>

</xbrl>


The desired output will look like this (so that it can be graphed as multiple 
series, ie., Assets is one series, Liabilities, another series.):

<?xml version="1.0" encoding="UTF-8"?>
<Company name="ABC" symbol="A" >
<!-- These need to be grouped by period -->
<Datapoint>
<datePeriod>BalanceAsOf_31Dec2005_Unaudited</datePeriod>
<Assets>563248000</Assets>
<Liabilities>251475000</Liabilities>
</Datapoint>
<Datapoint>
<datePeriod>BalanceAsOf_30Sep2006_Unaudited</datePeriod>
<Assets>517550000</Assets>
<Liabilities>252937000</Liabilities>
</Datapoint>
</Company>


 
My current XSLT looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
xmlns:xbrli="http://www.xbrl.org/2003/instance"; 
xmlns:usfr-pte="http://www.xbrl.org/us/fr/common/pte/2005-02-28";>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:attribute-set name="nameSymbol">
<xsl:attribute name="name">ABC</xsl:attribute>
<xsl:attribute name="symbol">A</xsl:attribute>
</xsl:attribute-set>
<xsl:variable name="XML" select="/"/>
<xsl:template match="/">
<!--Get Company Element -->
<xsl:element name="Company" use-attribute-sets="nameSymbol">
<xsl:for-each select="xbrli:xbrl">
<!-- Make Each Element The Context Node --> 
<!--xsl:for-each select="usfr-pte:*"-->
<!-- Make the Group Elements from all the 'contextRef' attributes -->
<xsl:for-each-group select="usfr-pte:*" group-by="@contextRef">
<!-- Actually return each grouping key here (a value from the 'current-group()' 
hash table -->
<xsl:value-of select="current-grouping-key()"/>
<!-- Create each group ('current-group()' is the hash table?) -->
<xsl:for-each select="current-group()">
<!-- Inside each group, create these elements -->
<xsl:element name="Datapoint">
<!-- Get attribute value as an Element -->
<xsl:element name="datePeriod">
<xsl:value-of select="@contextRef"/>
</xsl:element>
<!-- Get node local-name as name and (text) value as the Element value -->
<xsl:element name="{local-name()}">
<xsl:value-of select="string(.)"/>
</xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:for-each-group>
<!--/xsl:for-each-->
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>


and it returns this (which is not grouped properly):

<?xml version="1.0" encoding="UTF-8"?>
<Company name="ABC" symbol="A">BalanceAsOf_31Dec2005_Unaudited<Datapoint>
<datePeriod>BalanceAsOf_31Dec2005_Unaudited</datePeriod>
<AccountsPayable>31089000</AccountsPayable>
</Datapoint>
<Datapoint>
<datePeriod>BalanceAsOf_31Dec2005_Unaudited</datePeriod>
<AccountsReceivableTradeGross>129002000</AccountsReceivableTradeGross>
</Datapoint>
<Datapoint>
<datePeriod>BalanceAsOf_31Dec2005_Unaudited</datePeriod>
<AccountsReceivableTradeNet>120450000</AccountsReceivableTradeNet>
</Datapoint>
<Datapoint>
<datePeriod>BalanceAsOf_31Dec2005_Unaudited</datePeriod>
<AccumulatedComprehensiveIncome>-2475000</AccumulatedComprehensiveIncome>
</Datapoint>
</Company>

Anyone have any ideas on how I can get the desired output?

Thank you,

Paul


 
____________________________________________________________________________________
Looking for earth-friendly autos? 
Browse Top Cars by "Green Rating" at Yahoo! Autos' Green Center.
http://autos.yahoo.com/green_center/

--~------------------------------------------------------------------
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>
  • [xsl] Grouping, Paul A Kloepper <=