bonjour,
j'ai l'arbre suivant :
<root>
<individu nom="TOTO" prenom="toto"/>
<individu nom="RIRI" prenom="toto"/>
<individu nom="RIRI" prenom="riri"/>
<individu nom="FIFI" prenom="toto"/>
<individu nom="FIFI" prenom="fifi"/>
<individu nom="LOULOU" prenom="toto"/>
</root>
Je souhaite afficher la liste les individus par ordre alphabétique,
en ne recopiant le nom que s'il diffère :
résultat souhaité :
FIFI toto
fifi
LOULOU toto
RIRI toto
riri
TOTO toto
j'arrive bien à afficher la liste complète, sans détection des noms identiques :
<xsl:for-each select="individu">
<xsl:sort select="@nom"/>
<xsl:value-of select="@nom">
<xsl:text>   </xsl:text><!-- il est pas joli mon TAB ? -->
<xsl:value-of select="@prenom">
<br/>
</xsl:for-each>
par contre dès qu'il faut savoir quel était le nom précédent afin de le comparer
au nom courant, les difficultés apparaissent, puisque les position() des
individus diffèrent entre l'arbre réel et l'arbre trié :
<xsl:variable name="posPrec"><xsl:value-of select="number(position()-1)"/></xsl:variable>
<xsl:variable name="nomPrec"><xsl:value-of select="preceding-sibling::individu[position()=$posPrec]/@nom"/></xsl:variable>
$nomPrec contient le nom de l'individu à la position précédente, mais c'est
celle de l'arbre avant triage :-(
Merci d'avance pour vos lumières !
bubuze
--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !
Liste de diffusion "xml-tech@xmlfr.org" (http://xmlfr.org).
Cette liste est a votre disposition pour discuter en francais de
tout sujet technique lie a XML.
Pour resilier votre abonnement, envoyez un message contenant
la commande "unsubscribe" a xml-tech-request@xmlfr.org
(mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
Received on Sun Oct 2 10:51:55 2005