Subject: [xsl] Grouping From: Paul A Kloepper <kloepper@xxxxxxxxx> Date: Thu, 22 Mar 2007 01:02:46 -0700 (PDT) |
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/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Multiple HTML content in , Michael Kay | Thread | [xsl] State of Browser Support for , John Perkins |
Re: [xsl] What's your visual metaph, Kamal Bhatt | Date | RE: [xsl] What's your visual metaph, W Charlton |
Month |