Transformation XSLT et javascript

Transformation XSLT et javascript - HTML/CSS - Programmation

Marsh Posté le 23-02-2007 à 16:00:01    

Bonjour à tous !
 
Je suis en train d'écrire en site web avec stockage de l'information dans des fichiers XML. Lors de la consultation du site, un script javascript se charge de télécharger depuis le site le fichier XML contenant les données à visualiser et une feuille de style XSL. Il effectue une transformation (XML + XSL => HTML) et incorpore le résultat dans une page HTML servant en quelque sorte de template.
 
La transformation est réalisée par ce code :
 

Code :
  1. var currentPage = 'accueil.xml';
  2. var previousPage;
  3. var xslPageLoaded = false;
  4. var xmlPageLoaded = false;
  5. function loadPage2(page){
  6.   var xhr_request_xmlPage = null;
  7.   var xhr_request_xslPage = null;
  8.   xhr_request_xslPage = getXMLHttpRequest();
  9.   xhr_request_xslPage.onreadystatechange = function(){
  10.     if(xhr_request_xslPage.readyState == 4 && xhr_request_xslPage.status == 200) {
  11.       xslPageLoaded = true;
  12.       if(xmlPageLoaded){
  13.         transformPage(xhr_request_xmlPage.responseXML,xhr_request_xslPage.responseXML);
  14.       }
  15.     }
  16.   }
  17.   xhr_request_xslPage.open("GET","/style/v2/xsl/transform.xsl",true);
  18.   xhr_request_xslPage.send(null);
  19.  
  20.   xhr_request_xmlPage = getXMLHttpRequest();
  21.   xhr_request_xmlPage.onreadystatechange = function(){
  22.     if(xhr_request_xmlPage.readyState == 4 && xhr_request_xmlPage.status == 200) {
  23.       xmlPageLoaded = true;
  24.       if(xslPageLoaded){
  25.         transformPage(xhr_request_xmlPage.responseXML,xhr_request_xslPage.responseXML);
  26.       }
  27.     }
  28.   }
  29.   xhr_request_xmlPage.open("GET","/xml/"+page,true);
  30.   xhr_request_xmlPage.send(null);
  31. }
  32. function transformPage(xmlPage,xslPage){
  33.   var processorPage = new XSLTProcessor();
  34.   processorPage.importStylesheet(xslPage);
  35.   processorPage.setParameter(null,"useJsLinks","true" );
  36.  
  37.   var resultatPage = processorPage.transformToFragment(xmlPage,document);
  38.  
  39.   document.getElementById("content" ).innerHTML="";
  40.   document.getElementById("content" ).appendChild(resultatPage);
  41.  
  42.   xslPageLoaded = false;
  43.   xmlPageLoaded = false;
  44. }


 
Le problème est que, bien que ce code fonctionne parfaitement sous Firefox, je n'ai pour le moment toujours pas trouvé comment obtenir le même résultat avec Internet Explorer (y compris la version 7).
J'avais essayé avec ce code là :
 

Code :
  1. function transformPageIE(xmlPage,xslPage){
  2.   var xslt = new ActiveXObject("Msxml2.XSLTemplate.3.0" );
  3.   xslt.stylesheet = xslPage;
  4.   xslProc = xslt.createProcessor();
  5.   xslProc.input = xmlPage;
  6.   xslProc.addParameter("useJsLinks", "true" );
  7.   xslProc.transform();
  8.   document.getElementById("content" ).innerHTML="";
  9.   document.getElementById("content" ).appendChild(xslProc.output);
  10. }


 
mais malheureusement, il ne fonctionne pas. Quelqu'un pourrait-il m'aider à comprendre les mystères du javascript sous IE ?
 
Merci d'avance.


Message édité par Dumbledore le 23-02-2007 à 16:01:31
Reply

Marsh Posté le 23-02-2007 à 16:00:01   

Reply

Marsh Posté le 23-02-2007 à 16:05:11    

Ce genre de choses se font plutôt côté serveur...

Reply

Marsh Posté le 23-02-2007 à 16:13:17    

y'a la lib ajaxslt qui marche pour firefox et IE

Reply

Marsh Posté le 23-02-2007 à 17:06:55    

FlorentG : c'est exactement ce que je ne veux pas faire car j'ai un prob d'API avec mon serveur (le code que j'avais écrit en PHP5 ne voulait pas fonctionner avec PHP4 et l'adaptation PHP4 que j'en ai fait fonctionnait mal).
 
Rufo : je vais regarder ça, merci

Reply

Marsh Posté le 24-02-2007 à 16:54:58    

Sauf que l'XSLT est les navigateurs, bof bof... A part si t'es en milieu contrôlé, faut éviter. Surtout si c'est pour une page publique, n'espère pas être référencé :(
 
Pour l'adaptation php4, c'est pas trop compliqué pourtant

Reply

Marsh Posté le 26-02-2007 à 19:15:06    

FlorentG a écrit :

Sauf que l'XSLT est les navigateurs, bof bof... A part si t'es en milieu contrôlé, faut éviter. Surtout si c'est pour une page publique, n'espère pas être référencé :(
 
Pour l'adaptation php4, c'est pas trop compliqué pourtant


 
Manifestement, en PHP4, mon hébergeur m'envoie bouler.
Finalement, j'ai laissé tombé la lib proposé par rufo pour utiliser Sarissa.
En gros, ça crée une sorte de wrapper qui permet d'utiliser l'API d'IE avec la syntaxe de Firefox. Ca marche pas mal. Manque juste un support pour Konqueror ou autre.
 
Quant au référencement, c'est pas trop grave. C'est juste un petit site perso sur lequel on ne tombe pas par hasard.
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed