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 :

Gestion des apostrophes dans les xsl:value-of - select


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur en études décisionnelles
    Inscrit en
    Février 2013
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur en études décisionnelles

    Informations forums :
    Inscription : Février 2013
    Messages : 134
    Points : 351
    Points
    351
    Par défaut Gestion des apostrophes dans les xsl:value-of - select
    Bonjour,

    Je travaille sur un ETL qui génère automatiquement du code XSL.
    J'ai une question sur la gestion des apostrophes.

    Ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="liste(une_liste, '[name]', ',\n\t')"/>
    renvoie une chaîne de caractère vide. (liste étant une fonction déjà définie préalablement)

    J'aimerais rajouter un test avec un if pour remplacer ceci par une virgule lorsque c'est vide (je ne traite pas le cas où ce n'est pas vide pour des questions de lisibilité du code).
    Comment faire pour échapper les apostrophes autour de [name] et \n\t dans cette expression ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="if('liste(une_liste, '[name]', ',\n\t')'='') then ',' else '...'"/>

    J'ai essayé l'antislash, tripler les apostrophes, et le remplacement des apostrophes autour de la première expression du if par le code ascii &#39 ;.
    Merci pour vos réponses. Bonne journée.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 563
    Points : 21 627
    Points
    21 627
    Par défaut
    Hello,

    Pour profiter d'un niveau de plus, on peut utiliser &quot; au lieu de &apos; puisqu'ils sont interchangeables. Mais il est en général impossible d'aller plus profond.
    Rarement utile toutefois, et notamment toi tu n'en as pas besoin.

    Ça n'a aucun sens de mettre des apostrophes autour de liste() et donc, aucune raison de devoir échapper celles qu'il y a à l'intérieur.
    Je ne comprends pas pourquoi tu as pris l'idée de mettre ces apostrophes, mais je pense que maintenant que je te l'ai dit tu te rendras compte qu'il ne fallait pas le faire.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur en études décisionnelles
    Inscrit en
    Février 2013
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur en études décisionnelles

    Informations forums :
    Inscription : Février 2013
    Messages : 134
    Points : 351
    Points
    351
    Par défaut
    Bonjour,

    Pas de problème, je reprends mon besoin.
    J'ai donc mon liste(une_liste, '[name]', ',\n\t') qui est remplacé par rien du tout.

    En rajoutant ce if, l'idée est de comparer des chaînes de caractère vides.

    Ainsi, à l'exécution, ça me donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="if(''='') then ',' else '...'"/>

    C'est pour cela que j'ai rajouté les apostrophes : pour me donner un élément de comparaison à gauche. Et dans ce cas, vu que je compare la même chaîne de caractères, j'obtiendrais ma virgule. Bien sûr ça ne fonctionne pas comme je le souhaite.

    Est-ce plus clair ? Peut-être existe-t-il une fonction du type isEmpty ou quoi que ce soit ?

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 563
    Points : 21 627
    Points
    21 627
    Par défaut
    Mouais c'est un peu plus clair : tu as ajouté les apostrophes dans l'espoir de convertir ta liste en string, ce qui du coup en fera la string vide si la liste est vide.

    Alors deux choses :
    • Oui, il y a une fonction empty() qui dira si oui ou non une liste est vide. Utilise ça.
    • Pour convertir quelque chose en string, on utilise la fonction string(). Si tu fais '3 + 2' ça ne va pas te donner la string '5'. Ça va te donner une string dont le premier caractère est 3, le suivant un espace, le suivant +, le suivant un espace, et le dernier 2.

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur en études décisionnelles
    Inscrit en
    Février 2013
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur en études décisionnelles

    Informations forums :
    Inscription : Février 2013
    Messages : 134
    Points : 351
    Points
    351
    Par défaut
    Bonjour,

    La fonction empty ne fonctionnait pas telle quelle, apparemment elle n'était pas reconnue. Je pense que c'est dû au fait que nous n'avions pas le même vocabulaire. Pour vous, une liste doit être un objet XSL, mais pour moi l'objet ma_liste est un string.
    Je ne pouvais pas faire cette distinction car je ne code jamais en XSL. Il est exploité par le logiciel propriétaire que j'utilise, et je ne fais que le lire. Mais c'est plus car je suis curieux, les utilisateurs ne le font pas en général.

    Du coup, a priori, je savais que '3 + 2' ne donnait pas '5'...


    Vous m'avez donné l'idée de regarder dans le code source. J'y ai trouvé une fonction qui ressemblait à empty pour les strings et qui était définie.

    Ainsi j'ai pu résoudre mon problème.

    Merci pour vos conseils.

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

Discussions similaires

  1. Gestion des chemins dans les JSPs
    Par schneidb dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 26/09/2008, 19h12
  2. Gestion des erreurs dans les pages JSP
    Par elewandowski dans le forum Struts 2
    Réponses: 3
    Dernier message: 04/12/2007, 21h18
  3. probleme des apostrophes (') dans les requetes!
    Par le_style dans le forum JDBC
    Réponses: 12
    Dernier message: 20/06/2007, 11h40
  4. Gestion des durées dans les tables Access
    Par climz dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 24/05/2006, 15h29
  5. Gestion des NULL dans les tables externes
    Par plouf2244 dans le forum Firebird
    Réponses: 1
    Dernier message: 23/03/2006, 16h55

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