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 :

[XPATH] Récupèrer la "row" précédente dans le for each


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Administrateur de base de données
    Inscrit en
    Juillet 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2006
    Messages : 98
    Points : 57
    Points
    57
    Par défaut [XPATH] Récupèrer la "row" précédente dans le for each
    Bonjour j'ai un petite question concernant xpath

    Voilà, j'Ai un for each qui récupère certains éléments de mon xml qui ne respecte pas nécessairement l'ordre de mes enregistrements de mon xml.

    Pour fin d'affichage correct d'un tableau html, j'ai besoin de récupèrer les informations de la ligne précédante de mon for each pour savoir si j'affiche ou pas une border...

    Présentement, je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:if test="count(preceding-sibling::ROW[1]/CLIENTS/CLIENTS_ROW) > 0">
    Après quelque tests, je me suis aperçu que preceding-sibling récupère les informations de l'enregistrement précédante dans le XML et non dans le for-each...Quelqu'un aurait une idée pour récupèrer le ROW d'avant de mon for each???

    Voici le genre de for each que je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:for-each select="ROWSET/ROW["une conditon xpath assez longue :P"]">
    Merci d'avance

    A+

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    ça va être assez compliqué, il est préférable d'utiliser une méthode de regroupement d'éléments, appelée méthode Muench en XSXLT, décrite dans la FAQ.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Membre du Club
    Administrateur de base de données
    Inscrit en
    Juillet 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2006
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    Ok je suis aller voir la FAQ mais je vois pas en quoi ça pourrait m'aider ????

    Il y a pas moyen de faire exemple

    au lieu de :
    count(preceding-sibling::ROW[1]/CLIENTS/CLIENTS_ROW) > 0

    faire :
    count(preceding-sibling::ROWSET[le Xpath de mon for each]/ROW[1]/CLIENTS/CLIENTS_ROW) > 0

    quelque chose comme ça?

  4. #4
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Ah, désolé, je n'avais pas bien analysé la demande... La méthode Muench n'est (peut-être) pas la plus pertinente dans ce contexte. Une solution mettant en oeuvre deux variables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <xsl:variable name="selection" select="ROWSET/ROW[...]" />
    <xsl:for-each select="$selection">
      <xsl:variable name="compteur" select="position()" />
      <xsl:if test="count($selection[$compteur - 1]/CLIENTS/CLIENT_ROW) > 0">
      ...
      </xsl:if>
      ...
    </xsl:for-each>
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  5. #5
    Membre du Club
    Administrateur de base de données
    Inscrit en
    Juillet 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2006
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    Ça semble avoir du sens.

    J'essaie ça!

    Merci

    A+

  6. #6
    Membre du Club
    Administrateur de base de données
    Inscrit en
    Juillet 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2006
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    Ça semble récupèrer seulement la première ligne (row) dans la variable.

    Comment faire pour récupèrer toute les rows dans la variable???

    A+

  7. #7
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Citation Envoyé par tommey
    Ça semble récupèrer seulement la première ligne (row) dans la variable.
    Es-tu sûr de ton expression XPath ? Si oui, quel processeur XSLT utilises-tu ? (Saxon a un petit bug qui empêche l'utilisation d'une variable dans un for-each)
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  8. #8
    Membre du Club
    Administrateur de base de données
    Inscrit en
    Juillet 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2006
    Messages : 98
    Points : 57
    Points
    57
    Par défaut
    Oui je suis sur de mon xpath car je lutilise dans un for each qui fonctionne très bien, c'est vraiment juste le preceding sibling qui ne fonctionne pas vraiment bien...

    Processeceur Xslt : -Dorg.xml.sax.driver=oracle.xml.parser.v2.SAXParser

  9. #9
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Citation Envoyé par tommey
    Oui je suis sur de mon xpath car je lutilise dans un for each qui fonctionne très bien, c'est vraiment juste le preceding sibling qui ne fonctionne pas vraiment bien...
    Curieux...
    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:for-each select="$selection/self::*">
    As-tu vérifié qu'il n'y avait vraiment qu'un seul élément dans $selection, avec un affichage de count($selection) ?
    Citation Envoyé par tommey
    Processeceur Xslt : -Dorg.xml.sax.driver=oracle.xml.parser.v2.SAXParser
    C'est le parseur XML qui est exposé ici, pas le processeur XSLT. Mais bon, à moins d'une configuration particulière, c'est le processeur XSLT d'Oracle que tu utilises.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

Discussions similaires

  1. [XSLT] Number dans un for-each
    Par stepd dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 18/08/2006, 13h40
  2. [XML-XPATH] Problème dans un for each
    Par stailer dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 26/12/2005, 12h11

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