Cliquez ici.
Accueil
 chercher             Plan du site             Info (English version) 
L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.Les listes de discussions XMLfr sont à votre disposition pour réagir sur nos articles ou simplement poser une question.Si vous ètes passionnée(e) par XML, pourquoi ne pas en faire votre métier ?XMLfr n'est heureusement pas le seul site où l'on parle de XML. Découvrez les autres grâce à XMLfr et à l'ODP.Les partenaires grâce auxquels XMLfr peut se développer.Pour tout savoir sur XMLfr.XMLfr sans fil, c'est possible !Pour ceux qui veulent vraiment en savoir plus sur XML.L'index du site.
 Commentaires et questions non techniques.Commentaires et questions techniques.

 
Cliquez ici.

From: CHEKROUN Jerome (Jerome.CHEKROUN@gefco.fr)
Date: 26/09/2003 - 09:55


Ce probleme a deja etait poser Cf :

NEAGOE Florin wrote:
>
> Bonjour,
>
> J'utilise une séquence que je trie. Je voudrais pouvoir récupérer
l'élément
> précédent dans ce tri.
> La fonction position() renvoie bien la position dans la liste triée, mais
si
> j'utilise cette valeur pour récupérer l'élément position()-1, l'élément
> retourné et celui qui précède dans le fichier XML et non dans la liste
> triée.

Vous pouvez le faire en deux tris : pour chaque tri trier à nouveau een
cherchant celui qui correspond au suivant du premier tri. Je ne sais pas
si c'est gourmand en ressource (ca eleve quand meme au carré le nombre
de traitements) car je ne l'ai jamais testé sur de gros fichier.

A titre d'exemple vous pouvez faire, a partir d'un fichier suivant :

<?xml version="1.0" encoding="UTF-8"?>
<exemple topic="methode de regroupement">
<noeud class="petit">A
</noeud>
<noeud class="moyen">B
</noeud>
<noeud class="gros">C
</noeud>
<noeud class="petit">D
</noeud>
<noeud class="moyen">E
</noeud>
<noeud class="gros">F
</noeud>
<noeud class="moyen">G
</noeud>
<noeud class="gros">H
</noeud>
<noeud class="petit">I
</noeud>
<noeud class="gros">J
</noeud>
<noeud class="petit">K
</noeud>
<noeud class="moyen">L
</noeud>
</exemple>

trier et afficher les noeuds par @class en indiquant pour chaque noeud :
la classe, la position dans le tri, le texte et le texte du noeud
suivant avec la feuille xsl suivante :

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="text"/>
        <xsl:template match="/">
                <xsl:apply-templates/>
        </xsl:template>
        <xsl:template match="exemple">
                <xsl:apply-templates select="noeud">
                        <xsl:sort select="@class" order="ascending"/>
                </xsl:apply-templates>
        </xsl:template>

        <xsl:template match="noeud">
                <xsl:call-template name="sortieNoeuds"/>
        </xsl:template>

        <xsl:template name="sortieNoeuds">
<xsl:variable name="indiceNoeud" select="position()"/>
<xsl:value-of select="@class"/>
<xsl:text> : </xsl:text>
<xsl:value-of select="text()"/>
<xsl:text> position : </xsl:text>
<xsl:value-of select="position()"/>
<xsl:text>|
</xsl:text>
<xsl:if test="not(position()=last())">
<xsl:text>Noeud suivant dans le tri :</xsl:text>
<xsl:call-template name="noeudSuivant">
<xsl:with-param name="indiceNoeudSuivant" select="$indiceNoeud+1"/>
</xsl:call-template>
</xsl:if>
        </xsl:template>
        
        <xsl:template name="noeudSuivant">
<xsl:param name="indiceNoeudSuivant" select="0"/>
<xsl:for-each select="/exemple/noeud">
<xsl:sort select="@class" order="ascending"/>
<xsl:if test="position()=$indiceNoeudSuivant">
<xsl:value-of select="text()"/>
</xsl:if>
</xsl:for-each>
        </xsl:template>

</xsl:stylesheet>

Donne ce réultat :

gros : C
  position : 1|
Noeud suivant dans le tri :F
gros : F
  position : 2|
Noeud suivant dans le tri :H
gros : H
  position : 3|
Noeud suivant dans le tri :J
gros : J
  position : 4|
Noeud suivant dans le tri :B
moyen : B
  position : 5|
Noeud suivant dans le tri :E
moyen : E
  position : 6|
Noeud suivant dans le tri :G
moyen : G
  position : 7|
Noeud suivant dans le tri :L
moyen : L
  position : 8|
Noeud suivant dans le tri :A
petit : A
  position : 9|
Noeud suivant dans le tri :D
petit : D
  position : 10|
Noeud suivant dans le tri :I
petit : I
  position : 11|
Noeud suivant dans le tri :K
petit : K
  position : 12|

Dans l'exemple j'indique le noeud suivant, mais ce ne sera pas le plus
dure à adapter. En terme de performance, je ne sais pas ce que ce type
d'xsl donne sur des fichiers lourds. Si vous utiliser ce genre de xsl
j'aimerais bien savoir ce que ça donne.

AleX

--
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)

-----Message d'origine----- De : Franck RICHARD [mailto:franck.richard@lw.mth.net] Envoyé : vendredi 26 septembre 2003 11:50 À : xml-tech@xmlfr.org Objet : [xml-tech] test sur valeur précédente

Bonjour à tous,

J'ai un petit soucis de test sur une valeur précédente... je m'explique, voici ma source XML:

<CAST> <CAST_FORM CREDIT="comedien" LEVEL="1" >Bernard Blier</CAST_FORM> <CAST_FORM CREDIT="comedien" LEVEL="2" >Francis Blanche</CAST_FORM> <CAST_FORM CREDIT="comedien" LEVEL="3" >Danihle Delorme</CAST_FORM> <CAST_FORM CREDIT="realisateur" LEVEL="4" >Georges Lautner</CAST_FORM> </CAST>

Pour l'instant j'arrive à ça :

comedien :Bernard Blier, comedien :Francis Blanche, comedien :Danihle Delorme, realisateur :Georges Lautner.

C'est à dire récupérer le crédit, citez la personne, le tout trié par numéro de level ...

En fait j'aimerais ne pas répéter le crédit quand il ne change pas, voici le résultat souhaité :

comedien: Bernard Blier, Francis Blanche, Danihle Delorme ; realisateur: Georges Lautner.

Je ne sais pas comment tester le credit précédent, pour ne pas le mentionné si il est identique.

J'ai pensé à faire une boucle indépendante pour chaque crédit, mais le problème est que les personnes doivent être triées par LEVEL, et qu'une fois le réal peut être en LEVEL 1 une fois en 4 etc ...

Merci pour votre aide.

A bientot.

-- 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) -- 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)



Archive générée par hypermail 2.1.3 le 28/06/2004 - 11:06 UTC

webmaster@xmlfr.org

 

xml tech

Discussions techniques au sujet de XML.

Cette liste est à votre disposition pour discuter en français de tout sujet technique lié à XML.



Devenez rédacteur <XML>fr et contribuez au développement du xml francophone !
Les documents publiés sur ce site le sont sous licence "Open Content"
Conception graphique
  l.henriot@online.fr  

Conception, réalisation et hébergement