XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
Arjun ShrivatsanSubject: XSLT 1.0 Grouping Small change reqd! please help
Author: Arjun Shrivatsan
Date: 09 May 2010 10:17 PM
I have the following xml

<DisplayDefinitionTable>
<ReportDesignName>sample</ReportDesignName>
<columns>
<column_entry order_num="0" relation_to_base="ItemRevision.item_id">Item ID</column_entry>
<column_entry order_num="1" relation_to_base="ItemRevision.IMAN_manifestation. data_file.platform">Platform</column_entry>
<column_entry order_num="2" relation_to_base="ItemRevision.IMAN_manifestation. data_file.equipment_names">Equipment Names</column_entry>
</columns>
<rows>
<row>
<object_tag tag="37967" uid="UsEAAAweIY0fUB"/>
<object_tag tag="37968" uid="E4OAAAwyIY0fUB"/>
<object_tag tag="35903" uid="jvPAAAwWIY0fUB"/>
<row_element column="0" component_tag="37967" property_name="item_id">000010</row_element>
<row_element column="1" component_tag="37968" property_name="platform">S4</row_element>
<row_element column="2" component_tag="37968" property_name="equipment_names">a</row_element>
</row>
<row>
<object_tag tag="37967" uid="UsEAAAweIY0fUB"/>
<object_tag tag="37968" uid="E4OAAAwyIY0fUB"/>
<object_tag tag="35903" uid="jvPAAAwWIY0fUB"/>
<row_element column="0" component_tag="37967" property_name="item_id">000010</row_element>
<row_element column="1" component_tag="37968" property_name="platform">S4</row_element>
<row_element column="2" component_tag="37968" property_name="equipment_names">b</row_element>
</row>
<row>
<object_tag tag="37967" uid="UsEAAAweIY0fUB"/>
<object_tag tag="37968" uid="E4OAAAwyIY0fUB"/>
<object_tag tag="35903" uid="jvPAAAwWIY0fUB"/>
<row_element column="0" component_tag="37967" property_name="item_id">000010</row_element>
<row_element column="1" component_tag="37968" property_name="platform">S4</row_element>
<row_element column="2" component_tag="37968" property_name="equipment_names">c</row_element>
</row>
<row>
<object_tag tag="37967" uid="UsEAAAweIY0fUB"/>
<object_tag tag="37968" uid="E4OAAAwyIY0fUB"/>
<object_tag tag="35903" uid="jvPAAAwWIY0fUB"/>
<row_element column="0" component_tag="37967" property_name="item_id">000010</row_element>
<row_element column="1" component_tag="37968" property_name="platform">S4</row_element>
<row_element column="2" component_tag="37968" property_name="equipment_names">d</row_element>
</row>
<row>
<object_tag tag="36053" uid="k8OAAAhQIY0fUB"/>
<object_tag tag="36037" uid="0IDAAAhQIY0fUB"/>
<object_tag tag="33521" uid="0EPAAAhQIY0fUB"/>
<row_element column="0" component_tag="36053" property_name="item_id">000016</row_element>
<row_element column="1" component_tag="36037" property_name="platform">S4</row_element>
<row_element column="2" component_tag="36037" property_name="equipment_names">k</row_element>
</row>
<row>
<object_tag tag="36053" uid="k8OAAAhQIY0fUB"/>
<object_tag tag="36037" uid="0IDAAAhQIY0fUB"/>
<object_tag tag="33521" uid="0EPAAAhQIY0fUB"/>
<row_element column="0" component_tag="36053" property_name="item_id">000016</row_element>
<row_element column="1" component_tag="36037" property_name="platform">S4</row_element>
<row_element column="2" component_tag="36037" property_name="equipment_names">l</row_element>
</row>
<row>
<object_tag tag="36053" uid="k8OAAAhQIY0fUB"/>
<object_tag tag="36037" uid="0IDAAAhQIY0fUB"/>
<object_tag tag="33521" uid="0EPAAAhQIY0fUB"/>
<row_element column="0" component_tag="36053" property_name="item_id">000016</row_element>
<row_element column="1" component_tag="36037" property_name="platform">S3</row_element>
<row_element column="2" component_tag="36037" property_name="equipment_names">m</row_element>
</row>
<row>
<object_tag tag="36053" uid="k8OAAAhQIY0fUB"/>
<object_tag tag="36037" uid="0IDAAAhQIY0fUB"/>
<object_tag tag="33521" uid="0EPAAAhQIY0fUB"/>
<row_element column="0" component_tag="36053" property_name="item_id">000016</row_element>
<row_element column="1" component_tag="36037" property_name="platform">S4</row_element>
<row_element column="2" component_tag="36037" property_name="equipment_names">n</row_element>
</row>
<row>
<object_tag tag="36053" uid="k8OAAAhQIY0fUB"/>
<object_tag tag="36037" uid="0IDAAAhQIY0fUB"/>
<object_tag tag="33521" uid="0EPAAAhQIY0fUB"/>
<row_element column="0" component_tag="36053" property_name="item_id">000016</row_element>
<row_element column="1" component_tag="36037" property_name="platform">S4</row_element>
<row_element column="2" component_tag="36037" property_name="equipment_names">o</row_element>
</row>
<row>
<object_tag tag="36053" uid="k8OAAAhQIY0fUB"/>
<object_tag tag="36037" uid="0IDAAAhQIY0fUB"/>
<object_tag tag="33521" uid="0EPAAAhQIY0fUB"/>
<row_element column="0" component_tag="36053" property_name="item_id">000017</row_element>
<row_element column="1" component_tag="36037" property_name="platform">S4</row_element>
<row_element column="2" component_tag="36037" property_name="equipment_names">p</row_element>
</row>
</rows>
<SearchCriteriaTitle>Search Criteria Used: (10 Objects found)</SearchCriteriaTitle>
<SearchCriteria>platform = S4</SearchCriteria>
<SearchCriteria>Type = DMDE_ProjectRevision</SearchCriteria>
</DisplayDefinitionTable>



After studying a lot abt grouping in XSLT 1.0 including here.. we came up with this stylesheet.

<?xml version="1.0" encoding="utf-8" ?>

<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="keyTeamID" match="row" use="row_element[2]" />
<xsl:key name="keyEmployeeID" match="row" use="row_element[1]" /> <xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="DisplayDefinitionTable">
<html>
<head>
<title>Default xml Report</title>

</head>
<body>

<P align="Center"><img alt="UGS" src="images/company_logo.gif"/></P>
<xsl:apply-templates select="ReportDesignName" />

<table border = "1">
<xsl:apply-templates select="columns" />
<xsl:apply-templates select="rows">
</xsl:apply-templates>
</table>
<P></P>
<xsl:apply-templates select="SearchCriteriaTitle" />
<xsl:apply-templates select="SearchCriteria" />
<P> <a href="#Top">Go to top of page</a> </P>
</body>
</html>
</xsl:template>

<xsl:template match="ReportDesignName">
<P align="Center">
<font size="+2" face="Verdana"><b>
<xsl:value-of select="." />
</b></font>
</P>
<P align="right">
<font size="2" face="Verdana"><B>

</B></font>
</P>
<P align="right"> <a href="#Search Criteria Used:">Search Criteria Used </a> </P>
</xsl:template>

<xsl:template match="columns">
<tr bgcolor = "silver">
<xsl:apply-templates select="column_entry"/>
</tr>
</xsl:template>
<xsl:template match="column_entry">
<th>
<xsl:value-of select="." />
</th>
</xsl:template>

<xsl:template match="//row[position() mod 2 = 0]">
<tr>
<xsl:apply-templates select="row_element" />
</tr>
</xsl:template>

<xsl:template match="//row[position() mod 2 = 1]">
<tr bgcolor ="#FFFFAA">
<xsl:apply-templates select="row_element" />
</tr>
</xsl:template>

<xsl:template match="row_element">

<td>
<xsl:value-of select="." />
<xsl:text disable-output-escaping="yes">&amp;nbsp;</xsl:text>
</td>
</xsl:template>

<xsl:template match="SearchCriteriaTitle">
<l><b><font size="2" face="Verdana"><a name="Search Criteria Used:"></a>
<xsl:value-of select="." />
</font></b></l>
</xsl:template>

<xsl:template match="SearchCriteria">
<li>
<xsl:value-of select="." />

</li>
</xsl:template>
<xsl:template match="rows" >
<xsl:for-each select="//row[generate-id(.) = generate-id(key('keyTeamID', row_element[2]))]">
<xsl:variable name="lngTeamID"><xsl:value-of select="row_element[2]" /></xsl:variable>

<!-- Select all the Employees belonging to the Team -->

<xsl:variable name="lstEmployee" select="//row[row_element[2]=$lngTeamID]" />


<xsl:call-template name="ShowEmployeesInTeam">
<xsl:with-param name="lstEmployee" select="$lstEmployee" />

</xsl:call-template>

</xsl:for-each>
</xsl:template>
<xsl:template name="ShowEmployeesInTeam">
<xslaram name="lstEmployee" />
<!-- Show the name of the Team currently being processed -->
<tr>


<xsl:for-each select="$lstEmployee[generate-id(.) = generate-id(key('keyEmployeeID', row_element[1]))]">
<xsl:variable name="lngEmployeeID" select="row_element[1]" />
<tr><td><xsl:value-of select="$lstEmployee[row_element[1]=$lngEmployeeID]/row_element[1]" /></td>

<td>
<xsl:value-of select="$lstEmployee[row_element[1]=$lngEmployeeID]/row_element[2]" />

</td>
<td> <xsl:for-each select="$lstEmployee[row_element[1]=$lngEmployeeID]">
<xsl:value-of select="row_element[3]" />
</xsl:for-each>
</td>

</tr>
</xsl:for-each>
</tr>

</xsl:template>
</xsl:stylesheet>


Current output is

Item ID Platform Equipment Names

000010 S4 abcd
000016 S4 klno
000017 S4 p


Required output is

Item ID Platform Equipment Names

000010 S4 abcd
000016 S4 klno
000016 S3 m
000017 S4 p


Basically we want grouping by itemid (which seems to be happening) and then grouping by platform(which does not happen)

Can you provide some pointers and any help would be truly appreciated.

Cheers!

Posttop
Alberto MassariSubject: XSLT 1.0 Grouping Small change reqd! please help
Author: Alberto Massari
Date: 11 May 2010 10:52 AM
Hi Arjun,
this is a question related to the XSLT language only, and will be better answered on a XSLT mailist list.

Sorry,
Alberto

 
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.