Sign Up
Search
Options
search
Chat
Help
News
Log in
Not Logged in
Home
»
Boards
»
Stylus Studio Developer Network
»
XSLT Help and Discussion
»
XSLT 1.0 Grouping Small change reqd! please help
Topic
Topic Page
1
2
3
4
5
6
7
8
9
Prev Topic
Next Topic
next
Subject:
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">&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!
top
Subject:
XSLT 1.0 Grouping Small change reqd! please help
Author:
(Deleted User)
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
Prev Topic
Next Topic
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 to Conference:
Select Conference
Stylus Studio Feature Requests
Stylus Studio Technical Forum
Website Feedback
XSLT Help and Discussion
XQuery Help and Discussion
Stylus Studio FAQs
Stylus Studio Code Samples & Utilities
Stylus Studio Announcements
go
Log In Options
Username:
Password:
Site Map
|
Privacy Policy
|
Terms of Use
|
Trademarks
Stylus Scoop XML Newsletter:
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.