IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

recupération élément précédent + apply-templates


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 21
    Points : 5
    Points
    5
    Par défaut recupération élément précédent + apply-templates
    Je vous expose le problème.

    Dans mon xsl, j'ai à un moment donné un apply-templates sur un noeud de type "enseignement".

    J'ai evidemment le template "enseignement" correspondant.

    L'exécution de l'apply-templates a lieu n fois ce qui correspondont donc à n noeud du fichier xml.

    Mon problème est le suivant :

    A la ième exécution de l'apply-templates comment retrouver le noeud sur lequel on travaillait à la (ième -1) exécution?

    Le soucis réside dans le fait que position() retourne bien la position du noeud de la liste que le apply-templates traite mais qqch du style enseignement[position()-1] se base sur le fichier xml et non la liste courante.

    Merci d'avance pour vos éclaircissements

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    personne ne sait?

  3. #3
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    et bien je dirais peut être ceci...
    le "enseignementt" précédent devrait être remonté ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preceding-sibling::enseignement[1]

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    ok Luta je vais voir avec cette solution
    mais je comprend pas le [1]
    car le noeud precedent ne se situe pas nécessairement en 1ere position ?
    mais apriori ce que je veux faire n'est pas impossible?
    je suis pas obligé de passer par de la récursivité?
    en tout cas merci pour cette proposition

  5. #5
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    ce n est aps comme ça que ça marche
    - preceding-sibling vise ceux qui sont avant l'élément courant
    - enseignement spécifie de nom de l'élément qui nous intéresse
    - [1] sa position par rapport au noeud courant
    ce qui nous donne en français
    le premier élément enseignement précédent l'élément courant

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    ok je comprends mieux mais en fait mon soucis c'est que le noeud precedent n'est pas necessairement frere dans mon cas


    exemple :

    <a>
    <b>
    <b> -> recupérer celui la ( ca sera mon précédent)
    <b>
    </a>
    <a>
    <b>
    <b>
    <b> -> a partir de la je voudrais recup mon précédent)
    </a>

  7. #7
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    je crois que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preceding::enseignement[1]
    devrait fonctionné

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    j'ai peut etre une idée
    passer par la position absolue : count(preceding::enseignement)+1
    puis faire un preceding::enseignement (difference des 2 positions absolues)
    mais comment arriver dans mon template en connaissant au préalable la position absolue du noeud précédent de la liste parcourue par apply-templates?

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    ok je teste
    encore merci

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    ca n' apas l'air de marcher d'autant plus qu'il arrive a trouver un précédent meme quand mon apply-templates ne doit appliquer qu'une fois le template correspondant (car un seul noeud remplit les conditions)

    et est ce normal de pour voir faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preceding::enseignement[1]/heure/@fin
    dans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="enseignement">

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    je suis en train de penser aussi que mon noeud précédent peut se trouver après dans mon fichier xml

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    un autre question pour être sûr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preceding::enseignement[1]
    donne le précédent de la liste sur laquelle le apply-templates travaille ou le précédent dans le fichier xml?

    encore merci d'avance pour les réponses

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    ca me donne le précédent dans xml mais pas le précédent de ma liste

  14. #14
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Ca depend de tes appels.
    Une solution simple si ton select de l'apply correspond exactement à la suite serait de passer dans un paramètre ce même select, ainsi tu pourrais utiliser ta position() sur le paramètre

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    Erwy c'est exactement ce que je viens de tester : j'y avais meme pas penser

    je fais le meme select effectivement dans le with param pour avoir que cette fameuse liste de travail.

    J'ai presque résolu le problème mais en fait il en reste un.

    En fait mon apply-templates fait un sort.

    et dans mon with-param ce n'est pas possible

    Je n'ai aucune idée de l'endroit où trier mes données

    Merci d'avance pour votre aide.

  16. #16
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    on pourrait aussi passer l ID de l'élément courant dans le param...avec un generate-id()

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    Bah je ne sais pas mais si j'arrive à trier c'est gagné

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    j'ai fait ca dans mon template enseignement mais ca ne marche pas

    Je rappelle que ma liste contient des noeuds enseignement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:for-each select="$liste">
     <xsl:sort select="heure/@deb" order="ascending"/>
     </xsl:for-each>
      <xsl:variable name="liste2" select="$liste"/>

  19. #19
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    j' arrive pas à trier pourtant ca doit pas être compliqué

    je sais qu'un sort ne se fait que dans un apply-templates ou for-each

    les autres posts ne m'aident pas

    Merci d'avance

  20. #20
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 21
    Points : 5
    Points
    5
    Par défaut
    Ca trie bien mais le problème c'est qu'il reindice pas

    de liste[1] liste[3] liste[2]

    j'aimerais avoir liste[1] liste[2] liste[3]

    donc meme ordre concernant les données mas pas les indices

    merci d'avance

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. apply-templates & co
    Par arnobidul dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 29/07/2005, 11h50
  2. [XSLT] Différence entre apply-templates et call-template
    Par Cpt.FLAM dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/04/2005, 18h47
  3. différence call-template et apply-templates
    Par mousstik dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 08/11/2004, 12h28
  4. apply-templates et for-each
    Par d'Oursse dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 14/05/2004, 08h38
  5. [xsl] alterner de style entre deux apply-template
    Par laouache dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 23/04/2004, 11h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo