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 :

[PHP][XSLT] fonctions sur les chaines


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 333
    Points : 586
    Points
    586
    Par défaut [PHP][XSLT] fonctions sur les chaines
    Bonjuors,

    Pourrait-on m'expliquer qu'est-ce qui ne va pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="lower-case(current())" />

    C'est la syntaxe exacte que je vois un peu partout, mais ca me renviot tuojours l'erreur suivante :

    Warning: XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]: XPath evaluation returned no result.

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    lower-case n'est pas une fonction de XPath 1.0 mais de XPath 2.0

    ERE
    Quand une tête pense seule, elle devient folle.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 333
    Points : 586
    Points
    586
    Par défaut
    Ah, en effet ce n'est pas une fonctions XPath 1.0, et PHP n'implemente pas XPath 2.0...

    La je suis sacrement bloque alors, si je ne peux pas me servir des fonctions XPath 2.0 avec PHP, ca ne me sert quasiment a rien d'utiliser XSLT, et si ca ne me sert a rien d'utiliser XSLT, je viens de perdre un bon paquet d'heures...

    Quelau4un aurait une solution ?

  4. #4
    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,

    Pas de panique : s'il manque une fonction dans XSLT, et qu'elle est impossible à écrire avec les éléments du langage, il est possible de créer une extension en PHP (c'est décrit dans la doc). En ce qui concerne ton problème immédiat, il existe une fonction XPath 1.0 qui peut faire l'affaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')" />
    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

  5. #5
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut Transfo XSLT avec fonction XPath PHP
    il est possible de créer une extension en PHP (c'est décrit dans la doc)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $transf = new XSLTProcessor();
    $transf->registerPHPFunctions();
    $transf->importStyleSheet($xsldoc);
    
    echo $transf->transformToXML($xmldoc);
    
    ...
    
    <xsl:value-of   select="php:function('strtolower',current())"/>
    ERE
    Quand une tête pense seule, elle devient folle.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 333
    Points : 586
    Points
    586
    Par défaut
    Oups, desole, j'ai retourner tout un tas de sites sur XPath/XSLT dans tout les sens, mais je n'ai pas pense a une solution avec PHP... Je n'aime pas trop avoir l'air du type qui ne cherche pas tout seul :p


    Merci, beaucoup, ca me soulage de savoir que je peux continuer sur ma lancee, en plus en utilisant des fonctions. Je l'ajoute directement a l'instanciation de mon objet XSLTProcessor pour la peine


    Merci

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 333
    Points : 586
    Points
    586
    Par défaut
    Derneir message qui pourrait peut-etre en aider d'autres...


    1) ne pas oublier d'ajouter un namespace pour PHP (xmlns:php="http://php.net/xsl") dans la balise <stylesheet> (ca parait evident apres coup, mais bon).
    2) "php:function(...)" me renvoyait une erreur (l'argument doit etre une chaine et non une array). En remplacant par "php:functionString(...)", ca passe !
    3) Ca fonctionne egalement avec par exemple "php:function('urlencode', string(expression/Xpath))"

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

Discussions similaires

  1. Pb avec les fonctions sur les chaines de caractères.
    Par arnold95 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/04/2008, 19h09
  2. Fonction sur les chaines
    Par joquetino dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/11/2005, 22h31
  3. Réponses: 2
    Dernier message: 01/05/2004, 21h15
  4. [LG]Symbole # (dièse) et fonctions sur les chaînes
    Par James64 dans le forum Langage
    Réponses: 6
    Dernier message: 24/03/2004, 14h19

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