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] Signe négatif positif avec translate()


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut [XPATH] Signe négatif positif avec translate()
    Salut à tous,

    J'explique mon cas, je passe dans mon url un paramètre pouvant contenir des + ou - suivi d'un entier.

    Exemple : http://site.net/page.php?param=+10+15+21

    Je passe cette valeur donc la valeur de param dans mon xml, je précise que j'utilise urlencode() sur param pour que mes + soient bien interprétés comme tels et non comme des espaces.

    Dans mon xsl, je génère des liens de façon à rajouter un +x ou -x à cette valeur.

    J'ai définit avant de générer ces urls une variable contenant l'url de la page en cours avec tous ses paramètres.

    Bref, jusqu'ici aucun problème.

    Là ou je n'arrive pas à trouver ce qui cloche c'est dans les remplacements des chaînes où il y a des + et des moins, car je pense que ça vient de là mais sans en être totalement certain.

    Le code en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <xsl:element name="a">
       <xsl:attribute name="href">
          <xsl:choose>
             <xsl:when test="/page/contenu/formulaire[@nom='visu']/valeur/filtre">
                <xsl:value-of select="translate($url, concat('filtre=', /page/contenu/formulaire[@nom='visu']/valeur/filtre), concat('filtre=', /page/contenu/formulaire[@nom='visu']/valeur/filtre, $param, @id))" />
             </xsl:when>
             <xsl:otherwise>
                <xsl:value-of select="concat($url, '&amp;filtre=', $param, @id)" />
             </xsl:otherwise>
          </xsl:choose>
       </xsl:attribute>
       <img src="{concat('modele/', /page/entete/style, '/', $src)}" alt="{$param}" />
    </xsl:element>
    $param a pour valeur + ou -
    @id est un entier
    /page/contenu/formulaire[@nom='visu']/valeur/filtre contient la chaîne des +x+x-x etc..

    Je sais que je rentre bien dans l'évaluation du translate puisque j'ai testé avec des chaînes différentes.
    Et en faisant ça, j'ai le droit à un comportement anarchique

    Par exemple en ajoutant TTT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="translate($url, concat('filtre=', /page/contenu/formulaire[@nom='visu']/valeur/filtre), concat('TTTfiltre=', /page/contenu/formulaire[@nom='visu']/valeur/filtre, $param, @id))" />
    Et avec pour valeur de $url de départ :
    gestion.php?cat=commentaire&page=1&affichage=0&nbcompp=25&comds=0&comordre=DESC&filtre=+15&artid=1
    J'obtiens à l'arrivée :
    glsfTon.php?caftcommlnfaTil&paglte&aTTTchaglt0&nbcomppt2=&comdst0&comoidiltDESC&TTTfiltre=&aifTdte

    J'ai testé en mettant des string() de tout part mais sans résultat.

    A noter que je fais plusieurs remplacement sur $url sur ma page et je n'ai de problème qu'ici.

    Une idée de comment pouvoir résoudre cet étrange problème ?

    Merci d'avance.

  2. #2
    Membre éprouvé
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Points : 1 063
    Points
    1 063
    Par défaut
    peux tu nous fournir ce que tu as comme valeur exact dans l'expression /page/contenu/formulaire[@nom='visu']/valeur/filtre
    juste pour rappel de l'utilisation de translate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    translate('coucou','uo','wt') => ctwctw
    donc pour moi un translate(?,'filtre=','filtre=') ne sert a rien

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut Quel con je fais XD
    En effet, je me suis trompé dans ce que faisait réellement translate() ...

    Je pensais que les arguments étaient comptés comme chaines entières et pas comme liste de caractères à remplacer.

    Du coup je me suis servi de substring-after() et substring-before() pour virer la partie incriminée pour pouvoir ensuite la rajouter à mon url.

    Inconvénient, c'est que les paramètres de mon url ne se trouveront pas à la même position.

    A moins que vous connaissiez une autre méthode.

    Url de départ :
    gestion.php?cat=commentaire&page=1&affichage=0&filtre=+26+24&nbcompp=25&comordre=DESC

    Je dois ajouter par exemple -26 à filtre dans mon url.

    Enfin déjà merci, sans toi j'aurais cherché pendant 3 plombes.

Discussions similaires

  1. [XPath] cibler les noeuds avec apply-templates
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 29/01/2007, 14h34
  2. [XPath] Problème d'expression avec current()
    Par virgul dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 24/07/2006, 15h28
  3. [XPath]Exprimer un "otherwise" avec Xpath?!!
    Par LeNouv_O dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 27/06/2006, 10h39
  4. [XSL] format-number disparition du signe négatif
    Par zozolh2 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 08/06/2006, 16h09
  5. [Portlet] Single Sign On possible avec une appli en JSP
    Par osmoze dans le forum Portails
    Réponses: 4
    Dernier message: 16/03/2006, 17h45

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