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 :

[XSLT]prob de variables(xpath) param d'un appel de template


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 3
    Points
    3
    Par défaut [XSLT]prob de variables(xpath) param d'un appel de template
    Salut,
    j'ai un petit soucis avec mes variables XSLT.
    j'ai vu les problémes qu'il existait avec les node-set et les result tree fragment mais bon ca m'as juste permis de savoir que ce que je faisais était pas top ...
    je voudrais donc juste récupérer la valeur de l'attribut dont le chemin est passé en paramétre.
    Vous avez une idée ?


    appel du template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:call-template name="date">
    <xsl:with-param name="chemin" select="/fournisseur/catalogue/periode/date_debut" />
    </xsl:call-template>
    ------------------------------------------------


    Mon template Date:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template name="date" >
    <xsl:param name="chemin" >
    <xsl:value-of select="exsl:node-set($chemin)/@attribut" />
    </xsl:param>
    </xsl:template>

    références aussi surlesquelles je me suis basé:
    http://www.dpawson.co.uk/xsl/sect2/nono.html#d1611e16
    => paragraphe 20

    http://www.biglist.com/lists/xsl-list/archives/200206/msg00511.html

    http://xmlfr.org/documentations/faq/041013-0001#N70

  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,

    la fonction node-set sert à convertir un result tree fragment en un node-set, pas à évaluer une expression XPath. L'extension qui le permet est dyn:evaluate(), notamment disponible avec Xalan.
    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
    Avril 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    bon j'ai trouvé une solution !!!
    c'est certainement pas la meilleure mais elle marche :

    l'appel de mon template :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <xsl:variable name="chemin">
    				<xsl:text>/fournisseur/catalogue/informations_catalogue/periode_catalogue/periode/date_fin</xsl:text>
    </xsl:variable>
     
    <xsl:call-template name="date">
    <xsl:with-param name="chemin" select="$chemin"/>
    </xsl:call-template>
    Mon template date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <xsl:variable name="jour" expr='{concat($chemin,"/@jour")}'/>
    <xsl:value-of select="$jour"/>
    le but était de passer une chaine de caractére correspondant a un chemin XPath dans l'appel d'un template , ceci permet donc d'avoir un template Date que l'on appelle plusieurs fois a partir des autres templates .

    sinon j'utilise comme parser le built-in de stylus studio XML.

    Par rapport a ce code sinon y-a-t-il des améliorations a apporter ? si oui de quel ordre ?
    qu'est-ce que vous en pensez ?
    faites votre remarques, critiques, etc ... je suis preneur de tout ca

    c'est en marchant dans la boue que l'on arrive a mieux courir sur le sec [/code]

  4. #4
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    attention, ton code n'est pas standart.

    le expr du xsl:variable n'appartient pas au XSLT ,il n'est supporté que par stylus studio.
    Donc si tu n'as jamais besoin d'utiliser ta solution ailleurs ça va, autrement.....

  5. #5
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    par contre je ne comprends pas trop ton problème, car en xslt comme tu peux passer un noeud en parametre

    appel du template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:call-template name="date"> 
    <xsl:with-param name="chemin" select="/fournisseur/catalogue/periode/date_debut" /> 
    </xsl:call-template>

    Mon template Date:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template name="date" > 
    <xsl:param name="chemin" > 
    <xsl:value-of select="$chemin/@attribut" /> 
    </xsl:param> 
    </xsl:template>
    marche tres bien :
    Ou alors ton parseur n'est pas du tout standart

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    ben mon but a terme est d'appliquer en batch un script PHP 5 qui vas appliquer le XSLT sur des fichiers XML via ce code ( en gros je ne l'ai pas testé )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $xml= DOMDocument::load('fichier1.xml');
    $xsl= DOMDocument::load('transformation.xsl');
     
    $xslt = new xsltProcessor ;
    $xslt->importStyleSheet($xsl);
    $result= $xslt->transformToXML($xml);
    //ca j'ai pas testé du tout et je suis quasiment sur que la syntaxe est fausse mais je n'en suis pas la 
    $result->SaveXML("resultat.xml");
    une idée sur la facon de faire car avec la doc que j'ai lu ( depuis 1 semaine que je planche sur ce projet je rame a mort (ca fait qu'une semaine que je me suis lancé dans les XSLT aussi ) )

    merci de votre coup de pouce

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Erwy
    par contre je ne comprends pas trop ton problème, car en xslt comme tu peux passer un noeud en parametre

    marche tres bien :
    Ou alors ton parseur n'est pas du tout standart

    ben le truc c'est que je n'ai réussi qu'a faire marcher le processeur XSLT de stylus studio et de <Oxygen /> mais les 2 me disent que en faisant comme ca ben ca me renvoie des noeuds vide , bref je peux pas accéder aux attributs ... alors que avec cette méthode ca marche ...

    j'y capte plus rien avec ces problémes de standard

    les parseurs MSXML.NET me cause un probléme de type : ne reconnait l'encodage UTF8 , XALAN-J idem , et saxon me dis bien ce que tu me dis ... arf bon je vais manger a toute

  8. #8
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Je me demande si ton problème n'est aps dans ton xpath

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="$chemin/@attribut" />
    Affiche l'attribut attribut, si il existe.

    pour afficher tous les attributs
    il faudrait le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:for-each select="$chemin/@*">
     
    <xsl:value-of select="." /> 
    </xsl:for-each>
    As tu tout simplement verifié tes xpath avant

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    oui je les ai vérifié et ils sont ok ( même au niveau de l'attribut ) donc le probléme vient pas de la.
    par contre si j'essaie d'utiliser un autre processeur que le built-in de stylus studio genre le Xalan-J qui est intégré aussi a stylus ( vu que j'ai pas trop capter comment installer Xalan-J en externe)

    quand j'utiliserais mon XSL ( au final pour convertir mes XML -> XML) via le PHP je vais utiliser la librairie libXSLT intégré a PHP5.

    bon je vais finir mon XSL et je vais le mettre aux 2 sauces la mienne et puis celle que tu m'as donner ( mais bon ca me fatigue un peu cette histoire car ya quand même prés de 700 lignes dans mon XSL )


    Sinon si tu me dis que je passe un noeud et que ce noeud peut me permettre de retourner des attributs comme des valeurs (comprise entre 2 balises XML) et bien je veux bien te croire car c'est ce que j'avais trouver au début mais vu que ca ne fonctionnait pas avec le processeur built-in ... j'ai chercher ailleurs ...

    ca m'étonne aussi de trouver aucune infos sur le net a ce niveau car c'est quand même la base du XSLT de pouvoir passer un chemin a un template qui se répéterai dans la reconstruction du XML.

    je vais retester ca quand même de suite avec une syntaxe simplifié de mon fichier ( 1 seul template qui appelle un second template ).

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Erwy
    Je me demande si ton problème n'est aps dans ton xpath

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="$chemin/@attribut" />
    Affiche l'attribut attribut, si il existe.
    j'avais modifier mon texte pour avoir un truc un peu plus compréhensible. je n'ai pas d'attribut @attribut mais en fait il s'appelle @jour comme j'ai mis dans mon dernier message comprenant du code.

    merci au passage de votre aide
    c'est carrément génial le XSLT pour arranger a sa sauce les données d'un XML qui viennent d'une autre applis mais bon c'est pas si facile que ca

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    peut-etre que mon fichier XSL ne contient pas les bons attributs dans la balise transform ( ou stylesheet j'ai essayer les 2 apparement c'est exactement la même chose d'aprés ce que j'ai lu )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <?xml version="1.0"?>
    <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
    mais bon j'ai essayé pleins de trucs a ce niveau .


    Sinon quel processeur tu me conseillerais pour effectuer mes tests ? un processeur externe genre Xalan ou Saxon ? ou l'interne convient et si oui lequel ? mais bon je t'avoue que faire marcher un processeur externe vas me prendre un peu de temps que je n'ai pas trop envie d'utiliser a ca .
    je rappelle que le processeur que je vais utiliser au final seras la libxslt de PHP5 ( de ZAMP http://xgarreau.org/zamp/ )

  12. #12
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    pas réveillé j'ai mal corrigé ton code

    code valable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:call-template name="date"> 
    <xsl:with-param name="chemin" select="/fournisseur/catalogue/periode/date_debut" /> 
    </xsl:call-template>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:template name="date" > 
    <xsl:param name="chemin" /> 
     
    <xsl:value-of select="$chemin/@attribut" /> 
     
    </xsl:template>
    Tu essayais simplement de redefinir ton param avec une donnée qui n'existait pas

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    je vais réssayer mais il me semble que ceci ne fonctionnait pas ( ca devait etre ce que j'avais au début )
    je te tiens au courant .

    sinon quel processeur conseille tu pour ce que je vais faire par la suite ?
    intégré ou externe a mon éditeur XSLT ?

  14. #14
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Vu que ton editeur n'utilise pas du standart -> externe

    le morceau de code mit marche, on utilise cela tous les jours.
    Par contre il n'est peut être pas adapté au reste ou a ce que tu veux faire

    je te conseille de tester ce type de chose dans des feuilles xslt test, hors de la principale, histoire d'isoler tes problèmes

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    bon ben je suis en train d'halluciner complet : ca marche !!!

    bon je vais tester avec d'autres processeurs en même temps comme ca je suis sur que si ca marche avec 3 processeurs ca devrait respecter les standards :p

    c'est un peu bourrin mais bon


    ben un grand merci.
    je pense que vous aller m'avoir pour un bon bout de temps

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    bon ben ca marche vraiment avec tous les processeurs interne de stylus studio ( Xalan-J intégré, Saxon 8.1.1 et l'intégré dont on sait rien )

    je vais pour le moment pas aller chercher plus loin au niveau des processeurs externe et je vais avancer dnas mon projet
    merci a vous je pense que je reviendrais ( souvent )

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

Discussions similaires

  1. [XSLT] Passer une variable à la fonction XPath document()
    Par lisael dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 29/01/2008, 21h59
  2. [XSLT] incrementer une variable
    Par Landolsi dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 02/11/2005, 10h44
  3. [XSLT] Addition de variable
    Par virgul dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 13/10/2005, 10h09
  4. [C#][XSLT] Passer des variables
    Par Landolsi dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 30/09/2005, 14h26
  5. [XSLT] incrémenter une variable
    Par nemya dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 26/09/2005, 17h12

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