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]

XSLT: Restructuring/Grouping


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@informatik.uni-freiburg.de   
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

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