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 :

Requête XPATH preceding-sibling [XPATH 1.0]


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Par défaut Requête XPATH preceding-sibling
    Bonjour,

    Je cherche à faire un traitement particulier en XSL et pour cela il me faut une requête particulière que je n'arrive pas à faire.

    Mon code XML est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <L1>
         <PARA></PARA>
         <NOTA>
               <PARA></PARA>
         <NOTA></NOTA> 
    </L1>
    <L1>
    </L1>
    Je me trouve dans le second L1 et je veux tester si dans le frère précédent L1 si j'ai un fils NOTA en dernière position.

    Pour cela j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:if test="preceding-sibling::*[1][child::*[last()][self::NOTA]]">
         <!-- traitement -->
    </xsl:if>
    Mais cela ne fonctionne pas ...

    Est-ce que vous auriez une idée, est-ce que je fait une erreur de syntaxe?

    Merci par avance de votre réponse.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par cris83500 Voir le message
    Mon code XML est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <L1>
         <PARA></PARA>
         <NOTA>
               <PARA></PARA>
         <NOTA></NOTA> 
    </L1>
    <L1>
    </L1>
    Il est mal formé : le premier <NOTA> n'est jamais fermé.


    Citation Envoyé par cris83500 Voir le message
    Je me trouve dans le second L1 et je veux tester si dans le frère précédent L1 si j'ai un fils NOTA en dernière position.

    Pour cela j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:if test="preceding-sibling::*[1][child::*[last()][self::NOTA]]">
         <!-- traitement -->
    </xsl:if>
    Mais cela ne fonctionne pas ...
    Ça devrait. Tu peux nous montrer un exemple court et complet (XML court et complet + XSLT courte et complète à appliquer dessus) qui prouve que ça marche pas ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Par défaut
    Merci de té réponse,

    petite erreur de ma part il ne devait pas se ré-ouvrir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <L1>
         <PARA></PARA>
         <NOTA>
               <PARA></PARA>
         </NOTA> 
    </L1>
    <L1>
    </L1>
    Après pour du code complet c'est ça en version schématisé.
    Ma question est que si vous êtes dans ce cas comment feriez-vous pour tester si l'élément frère précédent du second L1 se termine par un NOTA.

    Le traitement que j’effectue dans ce if est seulement l'attribution d'une marge différente a ma seconde liste L1 si elle se trouve dans ce cas.
    Cela ne marche pas car la marge que j'essaye d'attribuer n'est pas prise en compte.

    J'espère que vous pourriez m'aider avec ces explications.

    Merci par avance de vos réponses.

  4. #4
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Ce que t'a dit thelvin c'est que le test que tu fais dans ton if est tout fait correct. C'est l'endroit où il est utilisé qui ne doit pas être bon.

    Donc si tu veux de l'aide il va falloir nous donner plus de code.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Par défaut
    Je ne pense pas qu'il soit correcte mon texte du moins syntaxiquement peut-être mais il ne donne pas le résultat voulu.

    J'y suis toujours et déjà j'ai remarqué qu'il manque le L1 dedans ... ainsi que position().
    Donc pour l'instant j'en suis à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:if test="preceding-sibling::*[1][child::L1/*[position()=last()][self::NOTA]]">
         <!-- traitement -->
    </xsl:if>
    Après je ne vois vraiment pas quoi vous fournir de plus pour vous aidez, à part ça. Moi je pense que c'est ma syntaxe ou mon enchainement qui n'est pas bon.

    Est-ce dans mon cas je prend bien le fils précédent L1 déjà? j'ai déjà des doutes sur cela.

    Merci quand même de vos réponses en espérant que vous pourriez quand même m'aider.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par cris83500 Voir le message
    Après pour du code complet c'est ça en version schématisé.
    Et c'est très bien, c'est comme ça qu'on fait court.
    Mais même si c'est schématisé, il faut que ce soit complet : que le XML soit bien formé, et que le XSLT ait un élément <xsl:stylesheet>. Bref, on le prend, on le lance, et on voit ce qui se passe.

    Citation Envoyé par cris83500 Voir le message
    Je ne pense pas qu'il soit correcte mon texte du moins syntaxiquement peut-être mais il ne donne pas le résultat voulu.
    Si, à moins que les éléments frères puissent être autre chose que des L1.

    Citation Envoyé par cris83500 Voir le message
    J'y suis toujours et déjà j'ai remarqué qu'il manque le L1 dedans
    A priori un <L1> ne peut avoir que des éléments <L1> comme frères, non ?
    S'il peut y avoir autre chose, il faut adapter, en effet...

    Citation Envoyé par cris83500 Voir le message
    ... ainsi que position().
    Pas besoin d'utiliser position() puisque tu cherches un précédent et un dernier...

    Citation Envoyé par cris83500 Voir le message
    Donc pour l'instant j'en suis à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:if test="preceding-sibling::*[1][child::L1/*[position()=last()][self::NOTA]]">
         <!-- traitement -->
    </xsl:if>
    Ça ne ressemble pas à ce que tu demandes. Là tu cherches si le précédent nœud frère a un fils <L1> dont le dernier élément est <NOTA>.

    Citation Envoyé par cris83500 Voir le message
    Après je ne vois vraiment pas quoi vous fournir de plus pour vous aidez, à part ça.
    Citation Envoyé par thelvin
    Tu peux nous montrer un exemple court et complet (XML court et complet + XSLT courte et complète à appliquer dessus) qui prouve que ça marche pas ?
    Citation Envoyé par cris83500 Voir le message
    Moi je pense que c'est ma syntaxe ou mon enchainement qui n'est pas bon.
    C'est de l'informatique. Il n'y a pas lieu de croire, il suffit de prouver. Soit tu prouves que oui, soit tu prouves que non.

    Citation Envoyé par cris83500 Voir le message
    Est-ce dans mon cas je prend bien le fils précédent L1 déjà? j'ai déjà des doutes sur cela.
    C'est quoi un "fils précédent" ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XPath] preceding-sibling plusieurs criteres
    Par tralloc dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/11/2009, 11h28
  2. XPath Différence entre preceding et preceding-sibling
    Par FwRamaro dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 16/07/2008, 11h15
  3. [xml] Xpath besoin d'explication sur preceding-sibling::
    Par ekmule dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 10/01/2006, 09h32
  4. [XPATH] following-sibling probleme
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 01/12/2005, 15h02
  5. [XML] Requête Xpath
    Par Raylemon dans le forum Langage
    Réponses: 1
    Dernier message: 02/07/2005, 15h58

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