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][javascript] modif de param non prise en compte ss FF


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Par défaut [XSLT][javascript] modif de param non prise en compte ss FF
    Bonjour,

    J'affiche un document xml via une xsl en html, mon problème est la modification de ma xsl sous Firefox...qui décidément me pose beaucoup plus de problème qu'IE pour ce genre de chose!

    Dans ma feuille de style xsl, j'ai des paramètres dont les valeurs sont des chemins
    exemple : <xsl:param name="toto" select="//toto"/>

    A l'aide de la fonction setParameter(), je change la valeur de ce chemin :
    exemple : xsltP.setParameter(null,"toto","//toto/titi");

    Le problème vient du fait que lorsque je fais la transformation xml -> html via le xsl, il ne m'affiche pas le bon truc, cela continu à m'afficher le résultat de la transformation avec le chemin //toto...
    Alors que le résultat d'un getParameter() après le changement de la valeur du paramètre me renvoi bien //toto/titi...

    Est-ce que quelqu'un aurait la solution?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Par défaut
    En fait, j'ai déjà un autre problème quand je fais un getParameter(null,"toto") avant de faire la modif de mon paramètre, déjà il me renvoit null alors que le nom est bien celui qui se trouve dans ma xsl...

    Décidément, je ne comprends pas ce qui se passe...!

    Aidez-moi svp!!

  3. #3
    Membre émérite
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Par défaut
    Citation Envoyé par Eileen
    En fait, j'ai déjà un autre problème quand je fais un getParameter(null,"toto") avant de faire la modif de mon paramètre, déjà il me renvoit null alors que le nom est bien celui qui se trouve dans ma xsl...

    Décidément, je ne comprends pas ce qui se passe...!

    Aidez-moi svp!!

    salut, est tu certain que ta transfo passe sou ie? puisque je pense que tu essaye de passer un noeud dans un parametre (donc une chaine)? ce qui n'est pas possible à mon avis.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Par défaut
    Salut,

    Ben, tout se passe très bien sous IE parce que je fais comme ça :

    Nmodif = xsl.documentElement.selectSingleNode("//xsl:param[@name='toto']") ;
    Nmodif.setAttribute("select","//toto/titi") ;

    et si je veux passer une chaîne de caractère au lieu d'un noeud, je fais comme ça :

    Nmodif = xsl.documentElement.selectSingleNode("//xsl:param[@name='toto']") ;
    Nmodif.setAttribute("select"," 'titi' ") ;

    mais d'après ce que j'ai compris, on peut pas utiliser ces commandes sous FF...

    De toute manière, même quand mon paramètre est une simple chaîne de caractère ou un nombre, je récupère toujours null dans getParameter()...

    Je peux te transmettre mes fichiers pour que tu vois...si ça peut te permettre de m'aider...

  5. #5
    Membre émérite
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Par défaut
    Citation Envoyé par Eileen
    Salut,

    Ben, tout se passe très bien sous IE parce que je fais comme ça :

    Nmodif = xsl.documentElement.selectSingleNode("//xsl:param[@name='toto']") ;
    Nmodif.setAttribute("select","//toto/titi") ;

    et si je veux passer une chaîne de caractère au lieu d'un noeud, je fais comme ça :

    Nmodif = xsl.documentElement.selectSingleNode("//xsl:param[@name='toto']") ;
    Nmodif.setAttribute("select"," 'titi' ") ;

    mais d'après ce que j'ai compris, on peut pas utiliser ces commandes sous FF...

    De toute manière, même quand mon paramètre est une simple chaîne de caractère ou un nombre, je récupère toujours null dans getParameter()...

    Je peux te transmettre mes fichiers pour que tu vois...si ça peut te permettre de m'aider...

    envoi tes fichiers moi ou quelqu'un s'autre pourra y jeter un oeil. je n'avais pas vu que c'étais une modif d'xsl et non un passage de parametre à xsl.

  6. #6
    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 : 48
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    Non tu ne pourras pas utiliser selectNodes ou selectSingleNode sous FF mais la transformation de la feuille de style tel que tu le fais est à proscrire surtout que tu peux sous FF et sous IE passer des noeuds en paramètre à une feuille de style XSLT selon la technique classique
    ff http://xml.developpez.com/sources/?p..._javascript_FF avec le document.evaluate
    ie http://xml.developpez.com/sources/?p..._javascript_IE avec le selectnodes

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Par défaut
    Bonjour Erwy

    Qu'est ce qui est à proscrire?
    J'utilise la méthode indiquée par ton lien pour FF et ça ne marche pas
    alors que ma méthode avec le selectNodes pour IE marche très bien...

    Qu'est-ce que tu appelles la technique classique?

    D'autre part, je ne veux pas passer un paramètre dans ma feuille de style, mais transformer un paramètre qui existe déjà dans ma feuille de style xsl

    Désolée, mais je ne comprends pas bien ton message...

  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 : 48
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    Citation Envoyé par Eileen
    D'autre part, je ne veux pas passer un paramètre dans ma feuille de style, mais transformer un paramètre qui existe déjà dans ma feuille de style xsl
    Ca justement, c'est à proscrire absolument.
    le xsl:param est justement fait pour recevoir un paramètre exterieur via le processeur xslt, dans un autre langage ca revient à reecrire dynamiquement le programme que tu es en train de lire.

    Le code est different suivant ff ou ie est ce que tu as placé tes test correctement ? un exemple de code ff/ie
    (attention ff à un pb avec les types mimes , il vaut mieux utilise systématiquement l'extension .xml et non .xsl ou .xslt)
    Fais cet exemple vite fait et sans tester mais la démarche fonctionne je l'utilise très souvent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    if (window.ActiveXObject)
    	{
     
     
    			objxml= new ActiveXObject("Msxml2.DOMDocument");
    			objxml.async = false; 
    			objxml.load("doc.xml");
    			objxml.setProperty("SelectionLanguage","XPath")
     
    			objxslt = new ActiveXObject("Msxml2.XSLTemplate");
    			objxsltDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
     			objxsltDoc.async = false; 
    			objxsltDoc.load("xslt.xml");
     
    			objxslt.stylesheet = objxsltDoc;
    			objxsltProc = objxslt.createProcessor();
    			var param=lautrexml.selectNodes(monxpath)
     
    			objxsltProc.addParameter("monparamètre",param)
    			objxsltProc.input = objxml
    			objxsltProc.transform();
    			lacible.innerHTML=objxsltProc.output;
     
     
     
    	}
    	else
    	{
    		if(window.XMLHttpRequest)
    		{
    			objxml= document.implementation.createDocument("", "", null);
    			objxml.async = false;
    			objxml.load("doc.xml");
    			objxsltDoc =  document.implementation.createDocument("", "", null);
     			objxsltDoc.async = false;
    			objxsltDoc.load("xslt.xml");
     
    			objxsltProc = new XSLTProcessor();
    			objxsltProc.importStylesheet(objxsltDoc);
    			var param=document.evaluate(monxpath,lautrexml,null,5,null)
    		    objxsltProc.setParameter(null,"monparamètre",param)
    		    var resultat = objxsltProc.transformToFragment(objxml,document);
                lacible.innerHTML=""
                lacible.appendChild(resultat);
     
     
     
     
     
     
     
    		}
    		else
    		{
    			alert("Votre navigateur ne possède pas les composants nécessaires au fonctionnement de cette application");
    		}
    	}

  9. #9
    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 : 48
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    Un exemple plus détaillé et testé

    IMPORTANT, en version FF 1.5 (pas testé ensuite) le document.evaluate a d'assez grosse limitation sur xpath.
    Un chemin
    devra être écrite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     /*[name()="a"]/*[name()="b"]/*[name()="c"]
    Fichiers attachés Fichiers attachés

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Par défaut
    Merci pour ces infos Erwy,

    ça marche nickel !!!!

    Visiblement ce n'est pas très utilisé, parce que je n'avais pas trouvé grand chose sur le passage de XPath en paramètre pour modifier une xslt...

    Encore un grand merci !

  11. #11
    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 : 48
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    Citation Envoyé par Eileen
    Visiblement ce n'est pas très utilisé, parce que je n'avais pas trouvé grand chose sur le passage de XPath en paramètre pour modifier une xslt...
    Très peu de processeur XSLT permettent le passage de noeud me semble-t-il, ce qui explique que ce n'est pas un reflexe usité
    Moi par contre je l'utilise enormement comme ça marche pour ff et tout ce qui est environnement M$

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Par défaut
    Encore une petite question...

    Comment tu traduirais un XPath de ce genre :

    //toto[titi/@ti = 'a1' and titi='blabla' and @to ='a2']

    pour le faire fonctionner avec document.evaluate?

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 21
    Par défaut
    Euh, en fait, je ne suis pas limitée sur FF 1.5, je peux mettre //toto au lieu de /*/*[name()=toto]...

    Donc, je ne vais pas me prendre la tête à réécrire mes chemins!

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

Discussions similaires

  1. [Débutant] Modifications de fonctions non prises en compte
    Par Dardie dans le forum MATLAB
    Réponses: 1
    Dernier message: 12/06/2010, 12h45
  2. Modifications php ini non prises en compte
    Par Jesmar dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 18
    Dernier message: 03/06/2008, 15h56
  3. Modification de servlet non prise en compte
    Par Invité dans le forum NetBeans
    Réponses: 7
    Dernier message: 28/08/2007, 15h55
  4. Modifications feuilles CSS non prises en compte immédiatement
    Par brouce80 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/08/2007, 15h40
  5. Réponses: 4
    Dernier message: 29/09/2006, 16h38

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