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] Prédicat erroné dans expression XPath


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut [XPath] Prédicat erroné dans expression XPath
    Bonjour à tous,

    Je me retrouve dans une petite impasse, et je vous serai ravi que vous m'apportiez un zeste de vos lumières. Voila je dispose d'un fichier Xml décrivant une gallerie video :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    <?xml version="1.0" encoding="utf-8"?>
    <gallery version="2.1">
    <video _mngid="1">
        <title>Video #1</title>
        <thumb>
          <url>img#1.jpg</url>
        </thumb>
        <video>
          <stream bitrate="64">
            <url>vid#1.flv</url>
          </stream>
        </video>
    </video>
     
    <video _mngid="2">
        <title>Video #2</title>
        <thumb>
          <url>img#2.jpg</url>
        </thumb>
        <video>
          <stream bitrate="64">
            <url>vid#2.flv</url>
          </stream>
        </video>
    </video>
    </gallery>
    J'aimerai donc de ce fichier, extraire la valeur de la balise <title> de la video dont la balise <video>/<stream>/<url> vaudrait vid#2.flv par exemple.

    J'ai donc écrit ce bout de code en C avec la libxml2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    ...
    
    xmlXPathObjectPtr xpathres = xmlXPathEvalExpression("//gallery/video/title/text()[../video/stream/url/text()[.='vid#2.flv']]", xpathctx);
    
    if (xpathres && (xpathres->type == XPATH_NODESET))
        {
          for (i = 0; i < xpathres->nodesetval->nodeNr; i++)
            {
              xmlNodePtr n = xpathres->nodesetval->nodeTab[i];
              if (n->type == XML_TEXT_NODE || n->type == XML_CDATA_SECTION_NODE)
                  printf("- %s\n", n->content);
            }
        }
      else
          return -1;
    
    ...
    C'était l'expression Xpath qui me semblait la plus logique (désolé pour mon noobisme en Xpath), mais voila vous l'aurez compris au lieu de ne m'afficher le titre voulu (Video #2), ce code m'affiche la liste de toutes les videos comme si il ne prenait en compte que la premiere partie de la query à savoir : "//gallery/video/title/text()".

    Voila donc j'en appelle a votre aide afin de me corriger dans la formulation de cette query.. En esperant avoir été clair.. Merci !

  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,

    c'est assez curieux... Ton expression est effectivement fausse, par contre elle devrait ne rien te remonter. Il semblerait que le prédicat ne soit pas pris en compte

    Sinon, pour obtenir le résultat recherché, il manque un niveau au chemin relatif dans le prédicat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //gallery/video/title/text()[../../video/stream/url/text()[.='vid#2.flv']]
    Mais il est possible de simplifier l'expression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /gallery/video[video/stream/url = 'vid#2.flv']/title/text()
    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
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Wonderful !!

    Les deux versions marchent effectivement à souhait..

    GrandFather je te remercie grandement grand chef..

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

Discussions similaires

  1. [XPATH] Double condition dans expression xpath
    Par sorcer1 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 01/12/2009, 17h05
  2. [XPATH] Evaluer une expression xpath dans un xml
    Par antigone dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 29/01/2007, 17h21
  3. [XSL-FO] Variable dans un Xpath
    Par serwol dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 14/03/2006, 13h57
  4. [XSL] impossible d'utiliser variable dans expression XPATH
    Par pierre.zelb dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 18/01/2006, 07h41
  5. expression XPath et namespace
    Par gendalf37 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/10/2004, 13h26

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