xsl-list
[Top] [All Lists]

Re: unicity different rows

2004-05-12 10:45:09
Hi Lionel,
  Please try the following XSL -

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:xalan="http://xml.apache.org/xalan";>

<xsl:output method="xml" version="1.0"
encoding="UTF-8" indent="yes"/>
        
<xsl:key name="by-num" match="/root/*" use="name()"/>
<xsl:key name="by-alphabet" match="/temp/*"
use="name()"/>
        
<xsl:template match="/root">
   <xsl:for-each select="*">
     <xsl:if test="generate-id(.) =
generate-id(key('by-num', name())[1])">
        <xsl:element name="{name()}">
          <xsl:variable name="rtf1">
            <temp>
              <xsl:for-each select="key('by-num', name())">
                <xsl:copy-of select="child::*"/>
              </xsl:for-each>
            </temp>
          </xsl:variable>         
          <xsl:variable name="rtf2">
            <temp>
              <xsl:for-each
select="xalan:nodeset($rtf1)/temp/*">
                <xsl:if test="generate-id(.) =
generate-id(key('by-alphabet', name())[1])">
                  <xsl:element name="{name()}"/>
                </xsl:if>
              </xsl:for-each>
            </temp>
          </xsl:variable>
          
          <xsl:for-each
select="xalan:nodeset($rtf2)/temp/*">
            <xsl:sort select="name()" />
            <xsl:element name="{name()}" />
          </xsl:for-each>
      </xsl:element>
   </xsl:if>
</xsl:for-each>

</xsl:template>
        
</xsl:stylesheet>

<1>, <2> are not valid XML tag names. 

I tested the XSL with the following XML -

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <one>
    <a/>
    <b/>
   </one>
   <two>
    <a/>
   </two>
   <three>
    <b/>
    <c/>
   </three>
   <one>
    <a/>
    <c/>
   </one>
</root>

and got the output -
<?xml version="1.0" encoding="UTF-8"?>
<one>
  <a/>
  <b/>
  <c/>
</one>
<two>
  <a/>
</two>
<three>
  <b/>
  <c/>
</three>

Regards,
Mukul

--- Lionel Crine <crine(_at_)4dconcept(_dot_)fr> wrote:
Hi there,


I have a structure on which I want to make a unicity
sort. I don't know how 
to begin.
here it is what I have :

<1>
         <a/>
         <b/>
</1>
<2>
         <a/>
</2>
<3>
         <b/>
         <c/>
</3>
<1>
         <a/>
         <c/>
</1>

etc ...

And I want to sort the "number" by "letters" :
Here is what I want :

<1>
         <a/>
         <b/>
         <c/>
</1>
<2>
         <a/>
</2>
<3>
         <b/>
         <c/>
</3>


Thanks.
Lionel


Lionel CRINE
Ingénieur Systèmes documentaires
Société : 4DConcept
22 rue Etienne de Jouy 78353 JOUY EN JOSAS
Tel : 01.34.58.70.70 Fax : 01.39.58.70.70



--+------------------------------------------------------------------
XSL-List info and archive: 
http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to:
http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--+--




        
                
__________________________________
Do you Yahoo!?
Yahoo! Movies - Buy advance tickets for 'Shrek 2'
http://movies.yahoo.com/showtimes/movie?mid=1808405861 


<Prev in Thread] Current Thread [Next in Thread>