Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
864 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  XSL + Javascript -> probleme :(

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

XSL + Javascript -> probleme :(

n°318069
Slash-
Posté le 26-02-2003 à 10:36:41  profilanswer
 

Voila,
 
j'ai une feuille xml que je transforme a l'aide d'une xsl toute bete, la ok
 
ensuite maintenant dans ma feuille xsl j'aimerais que la transformation se fasse sur base d'un code javascript qui m'affichera un menu style windows explorer
 
le prob c'est que la feuille xsl est considere non valide et trouve des erreurs dans le javascript (alors que j'ai teste le javascript a part et ca marche bien)
 
quelqu'un sait comment contourner le probleme?
 
merci

mood
Publicité
Posté le 26-02-2003 à 10:36:41  profilanswer
 

n°318083
walli
Posté le 26-02-2003 à 10:47:22  profilanswer
 

code ?

n°318092
Slash-
Posté le 26-02-2003 à 10:52:03  profilanswer
 

le fichier xml :  
 

Code :
  1. <?xml version="1.0" encoding="windows-1252" ?>
  2. <?xml-stylesheet type="text/xsl" href="menudb.xsl"?>
  3. <ROWSET>
  4.   <ROW num="1">
  5.     <DB_ID>1</DB_ID>
  6.     <DB_NAME>ARWP</DB_NAME>
  7.   </ROW>
  8.   <ROW num="2">
  9.     <DB_ID>2</DB_ID>
  10.     <DB_NAME>ARWA</DB_NAME>
  11.   </ROW>
  12.   <ROW num="3">
  13.     <DB_ID>3</DB_ID>
  14.     <DB_NAME>EW3P</DB_NAME>
  15.   </ROW>
  16.   <ROW num="4">
  17.     <DB_ID>4</DB_ID>
  18.     <DB_NAME>WW3T</DB_NAME>
  19.   </ROW>
  20.   <ROW num="5">
  21.     <DB_ID>5</DB_ID>
  22.     <DB_NAME>WW3D</DB_NAME>
  23.   </ROW>
  24. </ROWSET>


 
le fichier xsl :  
 

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3. <xsl:template match="/">
  4.     <SCRIPT LANGUAGE='JAVASCRIPT'>
  5.     if (navigator.appName=="Netscape" ){document.writeln('<layer name="menu" left="0" top="0"></layer>');}
  6. else{document.writeln('<div id="menu" style="position:absolute;left:0px;top:0px;width:320px;height:16px;"></div>');}
  7. var type;type = new Array();
  8. var level;level = new Array();
  9. var texte;texte = new Array();
  10. var status;status = new Array();
  11. var image;image = new Array();
  12. var lien;lien = new Array();
  13. var pere;pere = new Array();
  14. var ok=0;var nb=1;var Apere=0;var Alevel=1;var oldpere=0;
  15. //
  16. // La cible par defaut pour les liens
  17. //
  18. var Acible="DataFrame";
  19. //
  20. function ajouter(Anew,Atype,Atexte,Aimage,Alien) {
  21.   if (Anew==1) {Apere=0;Alevel=1;}
  22.   type[nb]=Atype;
  23.   level[nb]=Alevel;
  24.   pere[nb]=Apere;
  25.   status[nb]=0;
  26.   texte[nb]=Atexte;
  27.   image[nb]=Aimage;
  28.   lien[nb]=Alien;
  29.   if (Atype==1) {Apere=nb;}
  30.   nb+=1;if (Atype==1) {Alevel+=1;}
  31. }
  32. function ouvre(num){
  33. status[num]=1;affMenu();
  34. }
  35. function ferme(num){
  36. status[num]=0;affMenu();
  37. }
  38. function verif(num){
  39. if (pere[num]!=0) {
  40.   while (pere[num]!=0) {
  41.    num=pere[num];
  42.    if (status[num]==0) {ok=0;}
  43.   }
  44. }
  45. }
  46. function affMenu(){
  47. var chaine = "";var saute=0;var niveau=1;
  48. for (var i = 1; i < texte.length; i++) {
  49.   ok=1;
  50.   verif(i);
  51.   if (ok==1) {
  52.    for (var j = 1; j < level[i]; j++) {
  53.     if (j == level[i]-1) {
  54.      chaine+="<img src='espacef.gif' align='top'>";}
  55.     else {
  56.      chaine+="<img src='espace2.gif' align='top'>";}
  57.    }
  58.    if (type[i]==1) {
  59.     if (status[i]==0) {
  60.      chaine+="<img src='fermer.gif' border='0' align='top' onmouseup='ouvre("+i+" )'> ";
  61.      chaine+="<A HREF='javascript:ouvre("+i+" )' class='liens'>"+texte[i]+"</a>";
  62.     }
  63.     else {
  64.      chaine+="<img src='ouvert.gif' border='0' align='top' onmouseup='ferme("+i+" )'> ";
  65.      chaine+="<A HREF='javascript:ferme("+i+" )' class='liens'>"+texte[i]+"</a>";
  66.     }
  67.    }
  68.    else {
  69.     chaine+="<A HREF='"+lien[i]+"' class='liens' target='"+Acible+"'>";
  70.     if (image[i]=="" ) {
  71.      chaine+="<img src='lien.gif' border='0' align='top'> ";
  72.     }
  73.     else {
  74.      chaine+="<img src='"+image[i]+"' border='0' align='top'> ";
  75.     }
  76.     chaine+=texte[i];
  77.     chaine+="</A>"
  78.    }
  79.    chaine+="<BR>";
  80.   }
  81. }
  82. if (navigator.appName=="Netscape" ){
  83.   document.layers['menu'].document.write(chaine);
  84.   document.layers['menu'].document.close();
  85. }
  86. else{
  87.   menu.innerHTML=chaine;
  88. }
  89. }
  90. <xsl:for-each select="ROWSET/ROW">
  91. ajouter(1,1,<xsl:value-of select="DB_NAME"/>,"","#" );
  92. </xsl:for-each>
  93. </SCRIPT>
  94. </xsl:template>
  95. </xsl:stylesheet>

n°318100
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 26-02-2003 à 10:57:50  profilanswer
 

[:miracle] Euh... on peut mélanger comme ça du JS et du XSL ? Ca m'semble douteux.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°318101
Slash-
Posté le 26-02-2003 à 10:59:38  profilanswer
 

ben c'est ce que je suis en train de me demander en fait...
 
si on peut pas, mon menu style windows explorer je l'ai dans le c** :(

n°318106
walli
Posté le 26-02-2003 à 11:02:34  profilanswer
 

oui oui on peut, je l'ai deja fait, mais par contre, j'avais du passer en plus par une page html.
ce qui n'empechait pas d'avoir du java script dans le xls avec des tests inférieurs supérieurs... parce que c'est sur le  

Code :
  1. for (var i = 1; i<texte.length; i++)


qu'il coince...


Message édité par walli le 26-02-2003 à 11:03:09
n°318109
kadreg
profil: Utilisateur
Posté le 26-02-2003 à 11:05:11  profilanswer
 

Slash- a écrit :


si on peut pas, mon menu style windows explorer je l'ai dans le c** :(


 
Les fichiers .js, c'est pratique, et en plus, les navigateurs le mettent dans leur cache :)


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°318113
Slash-
Posté le 26-02-2003 à 11:08:54  profilanswer
 

malheureusement walli, ce n'est pas la seule erreur, je l'ai vue et corrigé mais yen a plusieurs plus bas du meme genre ou alors avec des tags qui sont censés ne pas etre bien fermés etc...
 
kadreg, je peux pas utiliser de fichier, une des contraintes est que tout doit etre dans la base de données, donc si je savais mettre le tout dans le fichier puis le foutre dans la bd oracle ca pas de probleme, mais mettre un fichier javascript dans la bd, puis dans l'xsl faire un select pour ce fichier... ca m'a l'air tres douteux aussi...

n°318148
walli
Posté le 26-02-2003 à 11:22:31  profilanswer
 

vais jeter un coup d'oeil...
en fait mon fichier xsl il a cette structure :  

Code :
  1. <?xml version="1.0" encoding="windows-1252" ?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"
  3.                 xmlns="http://www.w3.org/TR/REC-html40" result-ns="">
  4. <xsl:script><![CDATA[
  5.    ici mes fonctions...
  6. ]]></xsl:script>
  7. <xsl:template match="/">
  8. <table border="1" width="100%" cellspacing="0" cellpadding="0" bgcolor="#DCDCDC">
  9. <tr>
  10.  <td class="libelle"><B>Informations familiales</B></td>
  11.  <td class="libelle"><center><B>Prospect</B></center></td>
  12.   <xsl:if expr="aEnfantOuConjoint">
  13.    <td class="libelle"><center><B>Conjoint</B></center></td>
  14.   </xsl:if>
  15.  <xsl:for-each select="//ASSURE/@TETE">
  16.   <xsl:if expr="isValide(this);">
  17.    <td class="libelle"><center><B>Enfant <xsl:value-of select="."/></B></center></td>
  18.   </xsl:if>
  19.  </xsl:for-each>
  20. </tr>
  21. etc etc etc...
  22. </xsl:template>
  23. </xsl:stylesheet>


Message édité par walli le 26-02-2003 à 11:29:35
n°318179
avander
Posté le 26-02-2003 à 11:37:10  profilanswer
 

Le problème c'est que du code source contient souvent des caractères auquels le XML et par extension l'XSL sont très sensibles pcq. ils interfèrent avec le balisage XML. Typiquement il s'agit de <, > et &.  
 
Pour eviter que l'XSL s'y perd il faut lui dire que ce qui suit doit figurer dans le résultat telquel, donc sans l'interprêter. Exemple:  


    <xsl:text><![CDATA[
     
... ton javascript code ...
 
]]></xsl:text>



---------------
A thing of beauty is a joy forever (John Keats)
mood
Publicité
Posté le 26-02-2003 à 11:37:10  profilanswer
 

n°318204
avander
Posté le 26-02-2003 à 12:01:35  profilanswer
 

Pour Walli :  
 
Je connais pas le tag xsl:script et je trouve aucune référence dans la doc de mon parser ( MsXSL) ni dans mon 'XML Bible' .
 
Il fait quoi au juste??
 
Bonne continuation. Avander


---------------
A thing of beauty is a joy forever (John Keats)
n°318212
Slash-
Posté le 26-02-2003 à 12:11:48  profilanswer
 

ca marche pas le xsl:text, fin si ca marche mais pas comme je voudrais,
 
ca m'affiche la page avec tout mon code javascript...

n°318361
avander
Posté le 26-02-2003 à 14:35:54  profilanswer
 

J'ai surement pas compris ce que tu voulais, mais pour moi il s'agissait de générer une page HTML avec du javascript dedans à l'aide d'XSL et partant d'un fichier XML.  
 
Si tu veux exécuter du js dans l'XSL à l'aide du tag xsl:script prévu dans XSLT 1.1 c'est très controversé d'après ce que j'ai pu lire ici http://xmlfr.org/actualites/tech/010301-0001
 
Avander


---------------
A thing of beauty is a joy forever (John Keats)
n°318389
walli
Posté le 26-02-2003 à 14:52:13  profilanswer
 

Avander a écrit :

J'ai surement pas compris ce que tu voulais, mais pour moi il s'agissait de générer une page HTML avec du javascript dedans à l'aide d'XSL et partant d'un fichier XML.  
 
Si tu veux exécuter du js dans l'XSL à l'aide du tag xsl:script prévu dans XSLT 1.1 c'est très controversé d'après ce que j'ai pu lire ici http://xmlfr.org/actualites/tech/010301-0001
 
Avander
 


 
ah, je savais pas ca...
 [:spamafote]  

n°318516
walli
Posté le 26-02-2003 à 16:18:44  profilanswer
 

J'ai un peu modifié le fichier xsl.
Par contre, ca sort la 'chaine' mais il faudrait pouvoir afficher son contenu dans une pahe html et non l'afficher telle quelle, et la, je sais pas trop.
alors si ca peut t'aider un peu :  

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2.   <!--xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  3.           xmlns="http://www.w3.org/TR/REC-html40" result-ns=""-->
  4.   <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"
  5.           xmlns="http://www.w3.org/TR/REC-html40" result-ns="">
  6.                
  7.  
  8.   <xsl:script><![CDATA[
  9.      
  10.   chaine= "";
  11.   tipe = new Array();
  12.   level = new Array();
  13.   texte = new Array();
  14.   status = new Array();
  15.   image = new Array();
  16.   lien = new Array();
  17.   pere = new Array();
  18.   ok=0;nb=1;Apere=0;Alevel=1;oldpere=0;
  19.  
  20.   //
  21.   // La cible par defaut pour les liens
  22.   //
  23.   var Acible="DataFrame";
  24.   //
  25.  
  26.   function ajouter(e,Anew,Atipe,tagName,Aimage,Alien) {
  27.       if (Anew==1) {Apere=0;Alevel=1;}
  28.       tipe[nb]=Atipe;
  29.       level[nb]=Alevel;
  30.       pere[nb]=Apere;
  31.       status[nb]=0;
  32.       var Atexte = e.selectSingleNode(tagName).text;
  33.       texte[nb]=Atexte;
  34.       image[nb]=Aimage;
  35.       lien[nb]=Alien; 
  36.       if (Atipe==1) {Apere=nb;} 
  37.       nb+=1;if (Atipe==1) {Alevel+=1;}
  38.   }
  39.  
  40.   function ouvre(num){
  41.      status[num]=1;affMenu();
  42.   }
  43.  
  44.   function ferme(num){
  45.      status[num]=0;affMenu();
  46.   }
  47.  
  48.   function verif(num){
  49.      if (pere[num]!=0) {
  50.         while (pere[num]!=0) {
  51.            num=pere[num];
  52.            if (status[num]==0) {ok=0;}
  53.         }
  54.      }
  55.   }
  56.  
  57.   function affMenu(){
  58.      var saute=0;var niveau=1;
  59.      for (var i = 1; i<texte.length; i++) {
  60.         ok=1;
  61.         verif(i);
  62.         if (ok==1) {
  63.            for (var j = 1; j < level[i]; j++) {
  64.               if (j == level[i]-1) {
  65.                chaine+="<img src='espacef.gif' align='top'>";}
  66.               else {
  67.                chaine+="<img src='espace2.gif' align='top'>";}
  68.            }
  69.            if (tipe[i]==1) {
  70.               if (status[i]==0) {
  71.                  chaine+="<img src='fermer.gif' border='0' align='top' onmouseup='ouvre("+i+" )'> ";
  72.                  chaine+="<A HREF='javascript:ouvre("+i+" )' class='liens'>"+texte[i]+"</a>";
  73.               }
  74.               else {
  75.                  chaine+="<img src='ouvert.gif' border='0' align='top' onmouseup='ferme("+i+" )'> ";
  76.                  chaine+="<A HREF='javascript:ferme("+i+" )' class='liens'>"+texte[i]+"</a>";
  77.               }
  78.            }
  79.            else {
  80.               chaine+="<A HREF='"+lien[i]+"' class='liens' target='"+Acible+"'>";
  81.               if (image[i]=="" ) {
  82.                  chaine+="<img src='lien.gif' border='0' align='top'> ";
  83.               }
  84.               else {
  85.                  chaine+="<img src='"+image[i]+"' border='0' align='top'> ";
  86.               }
  87.               chaine+=texte[i];
  88.               chaine+="</A>";
  89.            }
  90.            chaine+="<BR>";
  91.         }
  92.      }
  93.      
  94.   }
  95.  
  96.  
  97.    ]]></xsl:script>
  98.    
  99.  
  100.  
  101.    <xsl:template match="/">
  102.  
  103.  
  104.  
  105.    <!--div id="menu" style="position:absolute;left:0px;top:0px;width:320px;height:16px;"></div-->
  106.  
  107.  
  108.   <xsl:for-each select="ROWSET/ROW">
  109.    <xsl:eval>ajouter(this,1,1,'DB_NAME',"","#" );</xsl:eval>
  110.   </xsl:for-each>
  111.   <xsl:eval>affMenu();</xsl:eval>
  112.   <table>
  113.    <tr>
  114.     <td><xsl:eval>chaine</xsl:eval></td>
  115.    </tr>
  116.   </table>
  117.   </xsl:template>
  118.   </xsl:stylesheet>

n°318579
avander
Posté le 26-02-2003 à 17:26:20  profilanswer
 

Il me semble qu'on est parti pour un dialogue de sourd...  
 
D'après les tags que tu utilise, notamment ( xsl:eval et xsl:script) et le namespace xmlns:xsl="http://www.w3.org/TR/WD-xsl" dans ton exemple je dirais que tu utilise un parser XML complètement obsolète...  
 
Ca doit être l'horrible première tentative de Microsoft dans ce domaine! Tout ce qui précéde MSXML 3.0 ne respecte pas les recommandations W3C et tente d'introduire d'inombrables extensions propre à MS. A éviter comme la peste je dirai!
 
Personnelement j'utilise MSXML 3.0 et MsXSL.exe pour faire des transformations en batch!  
 
Quel sont les outils que tu utilise???  
 
A+. Avander
 
PS: Si MSXML 3.0 est installé tu dois utiliser le namespace adéquat xmlns:xsl="http://www.w3.org/1999/XSL/Transform", sinon il persiste à utiliser la version dégeu!
 


---------------
A thing of beauty is a joy forever (John Keats)
n°318590
walli
Posté le 26-02-2003 à 17:39:19  profilanswer
 


 
euh, suis d'accord avec toi sur un point, je respecte pas les normes...
 [:spamafote]  

n°318605
avander
Posté le 26-02-2003 à 17:59:59  profilanswer
 

Je suppose que tu sais ce que tu fais...  
 
A l'époque j'avais fait mes premières transformations avec le parser installé/livré avec IE ( et dont tu te sert encore).  
 
Pour me former je lisais XML Bible d'Elliot Rusty Harold et je tentais les exemples dans IE ( visu fichier XML avec référence à un stylesheet, IE s'occupant de la xformation en HTML.) Je me suis très vite rendu compte qu'il y avait beaucoup de divergences entre le parser IE et mon bouquin, heureusement MSXSML 3.0 est arrivé qui lui respecte quasi à la lettre les specs W3C.
 
A+. Avander  


---------------
A thing of beauty is a joy forever (John Keats)
n°319102
Slash-
Posté le 27-02-2003 à 12:25:30  profilanswer
 

merci pour vos reponse mais je pense que je vais abandonner cette solution, c'est beaucoup trop de chipotage a mon gout ...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  XSL + Javascript -> probleme :(

 

Sujets relatifs
Problème en VBA pour remplir une case ! ! ! ![NASM] problème pour utiliser le port 378h (parallele) sous XP ...
Apache et Tomcat : problème de session ?[HTML, JS] défilement d'un texte dans un calque / javascript popup
Problème de Parse Error que j'arrive pas a résoudre...[JAVASCRIPT] Zone visible/ Invisible... Petit probleme
Probleme de tables...cookies : php et javascript
[HTML/JS] Problème de onmouseover dans un map 
Plus de sujets relatifs à : XSL + Javascript -> probleme :(


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR