[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Question about grouping into a table

Subject: Question about grouping into a table
From: Ramesh Thummalapenta <ramesh.thummalapenta@xxxxxxxxxx>
Date: Tue, 25 Feb 2003 18:34:30 -0800
ramesh thummalapenta
I am new to XSLT and am experimenting to write a small application. What the application does is to transform XML into a table based on platform column type. Even through XML each product and platform entries are in a separate row in XML, I want to flatten and display all platforms for a product on the same row of the table in rendered HTML. My data looks like as follows:

<?xml version="1.0"?>
<!DOCTYPE deliv SYSTEM "http://santhi.us.oracle.com:7777/stylesheets/deliv.dtd">
<?xml-stylesheet type="text/xsl" href="http://santhi.us.oracle.com:7777/stylesheets/delivshow.xsl"?>
<deliv>
<delivtable>
<platforms>
<platrow DelivPlatID="60" Vendor="IBM" PlatformName="AIX" Release="4.3.2" />
<platrow DelivPlatID="61" Vendor="IBM" PlatformName="AIX" Release="4.3.3" />
<platrow DelivPlatID="62" Vendor="IBM" PlatformName="AIX" Release="5L" />
<platrow DelivPlatID="1" Vendor="HP" PlatformName="HP-UX" Release="10.20" />
<platrow DelivPlatID="2" Vendor="HP" PlatformName="HP-UX" Release="11.0" />
<platrow DelivPlatID="3" Vendor="HP" PlatformName="HP-UX" Release="11i" />
<platrow DelivPlatID="90" Vendor="RedHat" PlatformName="Linux" Release="6.0" />
<platrow DelivPlatID="94" Vendor="RedHat" PlatformName="Linux" Release="AS2.1" />
<platrow DelivPlatID="95" Vendor="RedHat" PlatformName="Linux" Release="ES7" />
<platrow DelivPlatID="93" Vendor="RedHat" PlatformName="Linux" Release="7.3" />
<platrow DelivPlatID="91" Vendor="RedHat" PlatformName="Linux" Release="6.2" />
<platrow DelivPlatID="92" Vendor="RedHat" PlatformName="Linux" Release="7.2" />
<platrow DelivPlatID="30" Vendor="HP" PlatformName="Tru64" Release="4.0d" />
<platrow DelivPlatID="31" Vendor="HP" PlatformName="Tru64" Release="5.0a" />
<platrow DelivPlatID="32" Vendor="HP" PlatformName="Tru64" Release="5.0b" />
</platforms>


<deliverables>
<delivrow Did="0" ProductId="2" Release="6.0 " PlatID="94" CompletionDate="01/01/1994" TargetDate="02/01/1994" TypeOfRelease="FR" BaseRelease="4.3.2" />
<delivrow Did="0" ProductId="10" Release="5.0 " PlatID="95" CompletionDate="01/03/1995" TargetDate="02/01/1995" TypeOfRelease="FR" BaseRelease="4.3.2" />
<delivrow Did="0" ProductId="46" Release="5.0 " PlatID="62" CompletionDate="01/01/1962" TargetDate="02/01/1962" TypeOfRelease="FR" BaseRelease="4.3.2" />
<delivrow Did="0" ProductId="123" Release="Env " PlatID="30" CompletionDate="01/01/2030" TargetDate="02/01/2030" TypeOfRelease="FR" BaseRelease="4.3.2" />
<delivrow Did="0" ProductId="123" Release="FAQ " PlatID="32" CompletionDate="01/01/2032" TargetDate="02/01/2032" TypeOfRelease="FR" BaseRelease="4.3.2" />
<delivrow Did="0" ProductId="193" Release="5.0 " PlatID="1" CompletionDate="01/01/2001" TargetDate="02/01/2001" TypeOfRelease="FR" BaseRelease="4.3.2" />
<delivrow Did="0" ProductId="193" Release="5.1 " PlatID="30" CompletionDate="01/02/2030" TargetDate="02/01/2030" TypeOfRelease="FR" BaseRelease="4.3.2" />
<delivrow Did="0" ProductId="193" Release="4.3 " PlatID="60" CompletionDate="01/01/1960" TargetDate="02/01/1960" TypeOfRelease="FR" BaseRelease="4.3.2" />
<delivrow Did="0" ProductId="193" Release="5.1 " PlatID="90" CompletionDate="01/01/1990" TargetDate="02/01/1990" TypeOfRelease="FR" BaseRelease="4.3.2" />
<delivrow Did="0" ProductId="276" Release="5.0 " PlatID="60" CompletionDate="01/01/1960" TargetDate="02/01/1960" TypeOfRelease="FR" BaseRelease="4.3.2" />
</deliverables>
</delivtable>
</deliv>


and my stylesheet looks as follows:

............................
............................
<xsl:key name="prodlookup" match="delivrow" use="@ProductId"/>
...........................
..........................
<table>
<xsl:variable name="uniqueIds" select="//deliv/delivtable/deliverables/delivrow[not(@ProductId=preceding::delivrow/@ProductId)]" />


<xsl:for-each select="$uniqueIds">
<xsl:variable name="currentrow" select="."/>
<xsl:variable name="tmpprodvector" select="key('prodlookup', $currentrow/@ProductId)"/>
<tr>
<td><xsl:value-of select="$currentrow/@ProductId"/></td>
<xsl:for-each select="/deliv/delivtable/platforms/platrow" >
<xsl:sort select="@*[name()=$plat_sortfield]" order="{$sortorder}" data-type="{$plat_sortfieldtype}" />
<xsl:variable name="currentplatrow" select="."/>
<xsl:for-each select="$tmpprodvector">
<xsl:if test="@PlatID != $currentplatrow/@DelivPlatID">
<td>N/A</td>
</xsl:if>
<xsl:if test="@PlatID = $currentplatrow/@DelivPlatID">
<td><xsl:value-of select="@TargetDate"/></td>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>



The above stylesheet shows 30 <td> elements for product with id 123 whereas i want to show 15 elements with only two relevant dates filled properly. Is there an easier way to do this? Am i missing something here?


Appreciate any inputs on this.
Ramesh


XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list



Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.