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

XML/XSL et SOAP Discussion :

XQuery : boucle "FOR" et séquences


Sujet :

XML/XSL et SOAP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Points : 5
    Points
    5
    Par défaut XQuery : boucle "FOR" et séquences
    Désolé pour la trivialité du sujet qui va suivre, mais j'y ai déjà passé des heures sans pouvoir aboutir à qqch ... Je craque donc en vous demandant de l'aide ...

    J'ai un document XML dans lequel je trouve la balise suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <CCM_ROLES>CRmgr|CRowner|Commission|Emetteur|Gestionnaire</CCM_ROLES>
    Le besoin est simple :

    - je souhaite lire le contenu de la balise
    - puis exploiter avec une boucle "FOR" le contenu de celle-ci

    J'écris donc la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    let $list_roles  := /CR_PROCESS/CCM_ROLES
    let $list_roles2 := "('" || fn:replace ($list_roles, "\|", "','") || "')"
     
    for $roles in $list_roles2
    return
        <ROLES>
            {$roles}
        </ROLES>
    Et le résultat obtenu, quelles que soient les "triturations" que je peux faire, est tous le temps :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <ROLES>
      ('CRmgr','CRowner','Commission','Emetteur','Gestionnaire')
    </ROLES>
    En clair : le contenu de la variable "list_roles2" n'est jamais interprété comme une séquence sur laquelle je peux itérer ...

    Pouvez-vous me sortir de ce "mauvais" pas ?

    D'avance, merci.

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Ce qu'on puisse faire c'est d'appliquer la fontion, "built-in" aussi, tokenize() comme ça.
    Code xquery : Sélectionner tout - Visualiser dans une fenêtre à part
    let $list_roles2 := fn:tokenize($list_roles, "\|")
    Pourtant, il faut faire attention que $list_roles ne devrait pas contenir plus qu'un terme, sinon, la fonction tokenize() se plaint. Dans ce cas dernier, si on veut regarder tous les termes de $list_roles, on fait simplement un "for" supplémentaire.

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Sinon, pour te rappeler ce qui n'allait pas dans le raisonnement :

    supposons que tu fasses

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    let $sum := "2+3"
    return <sum>{$sum}</sum>
    Est-ce que tu crois que cela va afficher <sum>5</sum> ou <sum>2+3</sum> ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

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