XSLT: Restructuring/Grouping

Subject: XSLT: Restructuring/Grouping
From: Wolfgang May <may@xxxxxxxxxxxxxxxxxxxxxxxxxx>
Date: Sat, 4 Mar 2000 19:45:39 +0100 (MET)
Hi,

I want to "group" elements by one of their attributes, e.g.,

<org id="org-WEU">
   <name>Western European Union</name>
   <abbrev>WEU</abbrev>
    <member type="member" ref="Greece"/>
    <member type="member" ref="France"/>
    <member type="member" ref="Spain"/>
    <member type="member" ref="Germany"/>
    <member type="member" ref="Italy"/>
    <member type="member" ref="Belgium"/>
    <member type="member" ref="Luxembourg"/>
    <member type="member" ref="Netherlands"/>
    <member type="member" ref="Portugal"/>
    <member type="member" ref="United-Kingdom"/>
    <member type="associate member" ref="Turkey"/>
    <member type="associate member" ref="Norway"/>
    <member type="associate member" ref="Iceland"/>
    <member type="observer" ref="Austria"/>
    <member type="observer" ref="Denmark"/>
    <member type="observer" ref="Finland"/>
    <member type="observer" ref="Sweden"/>
    <member type="observer" ref="Ireland"/>
    <member type="associate partner" ref="Czech-Republic"/>
    <member type="associate partner" ref="Hungary"/>
    <member type="associate partner" ref="Slovakia"/>
    <member type="associate partner" ref="Latvia"/>
    <member type="associate partner" ref="Lithuania"/>
    <member type="associate partner" ref="Poland"/>
    <member type="associate partner" ref="Bulgaria"/>
    <member type="associate partner" ref="Romania"/>
    <member type="associate partner" ref="Estonia"/>
</org>

into

<org id="org-WEU">
   <name>Western European Union</name>
   <abbrev>WEU</abbrev>
    <member type="member" 
            countries="Greece France Spain Germany Italy Belgium 
                       Luxembourg Netherlands Portugal
United-Kingdom"/>
    <member type="associate member" 
            countries="Turkey Norway Iceland"/>
    <member type="observer" 
            countries="Austria Denmark Finland Sweden Ireland"/>
    <member type="associate partner" 
            countries="Czech-Republic Hungary Slovakia Latvia
                       Lithuania Poland Bulgaria Romania
                       Estonia"/>
</org>
.

A "solution" based on

<xsl:template match="org">
  <organization>
    <xsl:copy-of select="@id|name|abbrev"/>
    <xsl:for-each select="member/@type"> 
       <member>
            ... collect all members of that type ... 
       </member>
    </xsl:for-each> 
  </organization>
</xsl:template>

does *not* work since duplicates in [[member/@type]] are not removed.
The solution must not assume that the domain where the type value is
taken from is known when writing the program - thus the values must be
selected from the input file.

... I am missing a possibility to define views in XSLT which are not
output but can be used in the computation. 

Wolfgang

to avoid questions: That's not my homework.

-- -----------------------------------------------------------------
Wolfgang May             E-mail: may@xxxxxxxxxxxxxxxxxxxxxxxxxx   
Universitaet Freiburg    http://www.informatik.uni-freiburg.de/~may/
Institut fuer Informatik D-79110 Freiburg / Germany
Lehrstuhl fuer Datenbanken und Informationssysteme
Tel ++49 761 203-8131    Fax ++49 761 203-8122 


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


Current Thread