|
Subject: Re: [xsl] Can I group in three levels? From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx> Date: Thu, 07 Nov 2002 18:10:17 -0500 |
I have problems to generate the desired output of an XML using XSL. I want to group in three levels
...
First I want to group in a first level with the same ID,NUMBER. Inside of this first group, a second group with a second group with PHONE. And finally a third group, inside the second group with ACT. I'm not sure if I'm explainig clear.
This is my XSL, that doesn't work
T:\ftemp>type felix.xml <?xml version="1.0" encoding="UTF-8"?> <ROWSET> <ROW> <ID>27835</ID> <NUMBER>29715</NUMBER> <PHONE>09876</PHONE> <ACT>ACT34</ACT> </ROW> <ROW> <ID>27835</ID> <NUMBER>29716</NUMBER> <PHONE>62784</PHONE> <ACT>ACT87</ACT> </ROW> <ROW> <ID>27835</ID> <NUMBER>29716</NUMBER> <PHONE>3333333</PHONE> <ACT>ACT23</ACT> </ROW> <ROW> <ID>27835</ID> <NUMBER>29716</NUMBER> <PHONE>3333333</PHONE> <ACT>ACT111</ACT> </ROW> </ROWSET>
T:\ftemp>type felix.xsl <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:variable name="rows" select="/ROWSET/ROW"/>
<xsl:for-each select="$rows">
<xsl:sort select="ID"/>
<xsl:if test="generate-id(.)=generate-id($rows[ID=current()/ID and
NUMBER=current()/NUMBER])">
<ID><xsl:value-of select="ID"/></ID>
<NUM><xsl:value-of select="NUMBER"/></NUM>
<xsl:variable name="idnums" select="$rows[ID=current()/ID and
NUMBER=current()/NUMBER]"/>
<xsl:for-each select="$idnums">
<xsl:sort select="PHONE"/>
<xsl:if test="generate-id(.)=
generate-id($idnums[PHONE=current()/PHONE])">
<PHONE_DATA>
<PHONE><xsl:value-of select="PHONE"/></PHONE>
<xsl:variable name="phones"
select="$idnums[PHONE=current()/PHONE]"/>
<xsl:for-each select="$phones">
<xsl:if test="generate-id(.)=
generate-id($phones[ACT=current()/ACT])">
<ACT_DATA>
<ACT><xsl:value-of select="ACT"/></ACT>
</ACT_DATA>
</xsl:if>
</xsl:for-each>
</PHONE_DATA>
</xsl:if>
</xsl:for-each>
</xsl:if>
</xsl:for-each>T:\ftemp>saxon felix.xml felix.xsl
<?xml version="1.0" encoding="utf-8"?>
<ID>27835</ID>
<NUM>29715</NUM>
<PHONE_DATA>
<PHONE>09876</PHONE>
<ACT_DATA>
<ACT>ACT34</ACT>
</ACT_DATA>
</PHONE_DATA>
<ID>27835</ID>
<NUM>29716</NUM>
<PHONE_DATA>
<PHONE>3333333</PHONE>
<ACT_DATA>
<ACT>ACT23</ACT>
</ACT_DATA>
<ACT_DATA>
<ACT>ACT111</ACT>
</ACT_DATA>
</PHONE_DATA>
<PHONE_DATA>
<PHONE>62784</PHONE>
<ACT_DATA>
<ACT>ACT87</ACT>
</ACT_DATA>
</PHONE_DATA>
T:\ftemp>type felix2.xml
<?xml version="1.0" encoding="UTF-8"?>
<ROWSET>
<ROW>
<ID>27835</ID>
<NUMBER>29715</NUMBER>
<PHONE>09876</PHONE>
<ACT>ACT34</ACT>
</ROW>
<ROW>
<ID>27835</ID>
<NUMBER>29716</NUMBER>
<PHONE>62784</PHONE>
<ACT>ACT87</ACT>
</ROW>
<ROW>
<ID>27835</ID>
<NUMBER>29716</NUMBER>
<PHONE>3333333</PHONE>
<ACT>ACT23</ACT>
</ROW>
<ROW>
<ID>27835</ID>
<NUMBER>29716</NUMBER>
<PHONE>3333333</PHONE>
<ACT>ACT111</ACT>
</ROW>
<ROW>
<ID>27835</ID>
<NUMBER>29715</NUMBER>
<PHONE>09876</PHONE>
<ACT>ACT34</ACT>
</ROW>
<ROW>
<ID>27835</ID>
<NUMBER>29715</NUMBER>
<PHONE>09877</PHONE>
<ACT>ACT34</ACT>
</ROW>
<ROW>
<ID>27835</ID>
<NUMBER>29716</NUMBER>
<PHONE>62784</PHONE>
<ACT>ACT87</ACT>
</ROW>
<ROW>
<ID>27835</ID>
<NUMBER>29716</NUMBER>
<PHONE>3333333</PHONE>
<ACT>ACT23</ACT>
</ROW>
<ROW>
<ID>27835</ID>
<NUMBER>29716</NUMBER>
<PHONE>3333333</PHONE>
<ACT>ACT111</ACT>
</ROW>
<ROW>
<ID>27835</ID>
<NUMBER>29715</NUMBER>
<PHONE>09876</PHONE>
<ACT>ACT35</ACT>
</ROW>
<ROW>
<ID>27835</ID>
<NUMBER>29716</NUMBER>
<PHONE>62784</PHONE>
<ACT>ACT87</ACT>
</ROW>
<ROW>
<ID>27835</ID>
<NUMBER>29716</NUMBER>
<PHONE>3333333</PHONE>
<ACT>ACT23</ACT>
</ROW>
<ROW>
<ID>27835</ID>
<NUMBER>29716</NUMBER>
<PHONE>3333333</PHONE>
<ACT>ACT112</ACT>
</ROW>
</ROWSET>T:\ftemp>saxon felix2.xml felix.xsl
<?xml version="1.0" encoding="utf-8"?>
<ID>27835</ID>
<NUM>29715</NUM>
<PHONE_DATA>
<PHONE>09876</PHONE>
<ACT_DATA>
<ACT>ACT34</ACT>
</ACT_DATA>
<ACT_DATA>
<ACT>ACT35</ACT>
</ACT_DATA>
</PHONE_DATA>
<PHONE_DATA>
<PHONE>09877</PHONE>
<ACT_DATA>
<ACT>ACT34</ACT>
</ACT_DATA>
</PHONE_DATA>
<ID>27835</ID>
<NUM>29716</NUM>
<PHONE_DATA>
<PHONE>3333333</PHONE>
<ACT_DATA>
<ACT>ACT23</ACT>
</ACT_DATA>
<ACT_DATA>
<ACT>ACT111</ACT>
</ACT_DATA>
<ACT_DATA>
<ACT>ACT112</ACT>
</ACT_DATA>
</PHONE_DATA>
<PHONE_DATA>
<PHONE>62784</PHONE>
<ACT_DATA>
<ACT>ACT87</ACT>
</ACT_DATA>
</PHONE_DATA>
T:\ftemp>rem Done!
-- Upcoming hands-on in-depth XSLT/XPath and/or XSL-FO: - North America: Feb 3 - Feb 7,2003
G. Ken Holman mailto:gkholman@xxxxxxxxxxxxxxxxxxxx Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/ Box 266, Kars, Ontario CANADA K0A-2E0 +1(613)489-0999 (F:-0995) ISBN 0-13-065196-6 Definitive XSLT and XPath ISBN 0-13-140374-5 Definitive XSL-FO ISBN 1-894049-08-X Practical Transformation Using XSLT and XPath ISBN 1-894049-10-1 Practical Formatting Using XSL-FO Next conference training: 2002-12-08,03-03,06
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Can I group in three levels?, Felix Garcia | Thread | RE: [xsl] Can I group in three leve, Jarno . Elovirta |
| Re: [xsl] MSXML / NBSP problem and , Mike Brown | Date | Re: [xsl] MSXML / NBSP problem and , Greg Faron |
| Month |