This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Sorry No Text : Grouping and Sorting Problem


At 2002-07-29 12:29 -0700, Kuhns Matt wrote:
My XML Sheet looks like this:
...
My XSL Looks like this:

<xsl:key name="GroupDesc" match="SM" use="@Grp"/>
...
I want my results to be grouped my Scripts, then by
the Grp attribute, but I keep getting
All the messages under the first script.
I find doing multi-level grouping is far easier using variables instead of using keys if you don't need a node set at the end of your grouping.

Please find a running example below where I store in variables only those in the scope of being grouped, and then use generate-id() with that variable to find the unique members.

I didn't

I hope this helps.

................... Ken

T:\ftemp>type matt.xml
<File>
<Script>
<TestScript Name="Script1">
<ScriptMessages>
<SM ET="0" Grp="1">Script1 Error #1</SM>
<SM ET="0" Grp="0">Script1 Error #0</SM>
<SM ET="0" Grp="1">Script1 Error #1</SM>
<SM ET="0" Grp="2">Script1 Error #2</SM>
<SM ET="0" Grp="0">Script1 Error #0</SM>
<SM ET="0" Grp="2">Script1 Error #2</SM>
<SM ET="0" Grp="1">Script1 Error #1</SM>
<SM ET="0" Grp="1">Script1 Error #1</SM>
<SM ET="0" Grp="0">Script1 Error #0</SM>
<SM ET="0" Grp="1">Script1 Error #1</SM>
<SM ET="0" Grp="1">Script1 Error #1</SM>
</ScriptMessages>
</TestScript>
<TestScript Name="Script2">
<ScriptMessages>
<SM ET="0" Grp="1">Script2 Error #1</SM>
<SM ET="0" Grp="0">Script2 Error #0</SM>
<SM ET="0" Grp="1">Script2 Error #1</SM>
<SM ET="0" Grp="2">Script2 Error #2</SM>
<SM ET="0" Grp="0">Script2 Error #0</SM>
<SM ET="0" Grp="2">Script2 Error #2</SM>
<SM ET="0" Grp="1">Script2 Error #1</SM>
<SM ET="0" Grp="1">Script2 Error #1</SM>
<SM ET="0" Grp="0">Script2 Error #0</SM>
<SM ET="0" Grp="1">Script2 Error #1</SM>
<SM ET="0" Grp="1">Script2 Error #1</SM>
</ScriptMessages>
</TestScript>
<TestScript Name="Script3">
<ScriptMessages>
<SM ET="0" Grp="1">Script3 Error #1</SM>
<SM ET="0" Grp="0">Script3 Error #0</SM>
<SM ET="0" Grp="1">Script3 Error #1</SM>
<SM ET="0" Grp="2">Script3 Error #2</SM>
<SM ET="0" Grp="0">Script3 Error #0</SM>
<SM ET="0" Grp="2">Script3 Error #2</SM>
<SM ET="0" Grp="1">Script3 Error #1</SM>
<SM ET="0" Grp="1">Script3 Error #1</SM>
<SM ET="0" Grp="0">Script3 Error #0</SM>
<SM ET="0" Grp="1">Script3 Error #1</SM>
<SM ET="0" Grp="1">Script3 Error #1</SM>
</ScriptMessages>
</TestScript>
</Script>
</File>

T:\ftemp>type matt.xsl
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="1.0">

<xsl:output method="text"/>

<xsl:template match="/">
<xsl:variable name="scripts" select="/File/Script/TestScript"/>
<xsl:for-each select="$scripts">
<xsl:sort select="@name"/>
<xsl:if test="generate-id(.)=generate-id($scripts[@Name=current()/@Name])">
Script <xsl:value-of select="@Name"/>:
<xsl:text/>
<xsl:variable name="groups"
select="$scripts[@Name=current()/@Name]/ScriptMessages/SM"/>
<xsl:for-each select="$groups">
<xsl:sort select="@Grp"/>
<xsl:if test="generate-id(.)=generate-id($groups[@Grp=current()/@Grp])">
Group <xsl:value-of select="@Grp"/>:
<xsl:text/>
<xsl:for-each select="$groups[@Grp=current()/@Grp]">
<xsl:value-of select="."/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</xsl:template>

</xsl:stylesheet>

T:\ftemp>xt matt.xml matt.xsl matt.txt

T:\ftemp>type matt.txt

Script Script1:

Group 0:
Script1 Error #0
Script1 Error #0
Script1 Error #0

Group 1:
Script1 Error #1
Script1 Error #1
Script1 Error #1
Script1 Error #1
Script1 Error #1
Script1 Error #1

Group 2:
Script1 Error #2
Script1 Error #2

Script Script2:

Group 0:
Script2 Error #0
Script2 Error #0
Script2 Error #0

Group 1:
Script2 Error #1
Script2 Error #1
Script2 Error #1
Script2 Error #1
Script2 Error #1
Script2 Error #1

Group 2:
Script2 Error #2
Script2 Error #2

Script Script3:

Group 0:
Script3 Error #0
Script3 Error #0
Script3 Error #0

Group 1:
Script3 Error #1
Script3 Error #1
Script3 Error #1
Script3 Error #1
Script3 Error #1
Script3 Error #1

Group 2:
Script3 Error #2
Script3 Error #2

T:\ftemp>rem Done!


--
Upcoming hands-on in-depth 3-days XSLT/XPath and/or 2-days XSL-FO:
- North America: Sep 30-Oct 4,2002
- Japan: Oct 7-Oct 11,2002

G. Ken Holman mailto:gkholman@CraneSoftwrights.com
Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0 +1(613)489-0999 (Fax:-0995)
ISBN 0-13-065196-6 Definitive XSLT and XPath
ISBN 1-894049-08-X Practical Transformation Using XSLT and XPath
ISBN 1-894049-07-1 Practical Formatting Using XSLFO
XSL/XML/DSSSL/SGML/OmniMark services, books (electronic, printed),
articles, training (instructor-live,Internet-live,web/CD,licensed)
Next public training: 2002-08-05,26,27,09-30,10-03,07,10


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]