Bonjour
Je rencontre un problème avec pages XML utilisant des feuilles de style XSL.
J'utilise des webservices qui me renvoient des pages xml.
Jusqu'à présent, je passe par des fonctions ajax pour charger le xml, puis le xsl et enfin fusionner les 2.
Code Actuel :
La page XML est générée dynamiquement.
Code JavaScript : 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 function RecupereAlerte(Qui,Login) { var url="../../Web_Services/webs_Alerte.php?CODEUT=" + Qui + "&LOG=" + Login + "&DIV=idDIVAlerte"; ajax(url, null , Alerte_Resultat , true , false , null); } function Alerte_Resultat(nodeXML) { ajax('../../Web_Services/webs_Alerte.xsl', null , FusionTableAlerte, true , false , nodeXML); } function FusionTableAlerteMemePage(NodeXSL,NodeXML) { var LeDiv = NodeXML.getElementsByTagName('zonediv').item(0).childNodes[0].data; var LeNbAlert = NodeXML.getElementsByTagName('nbalert').item(0).childNodes[0].data; FusionXSLXML(LeDiv,NodeXSL,NodeXML); } function FusionXSLXML(Zone,NodeXSL,NodeXML) { //il faut maintenant fusionner if( window.ActiveXObject) { xhtml = NodeXML.transformNode( NodeXSL); //alert(xhtml); //if(document.getElementById(Zone)) alert ('div ' + Zone + ' existe'); else alert ('di ' + Zone + ' n existe pas !!'); if(document.getElementById(Zone)) document.getElementById(Zone).innerHTML = xhtml; } // code for Mozilla, Firefox, Opera, etc. else if( document.implementation && document.implementation.createDocument) { xsltProcessor = new XSLTProcessor(); xsltProcessor.importStylesheet( NodeXSL); xhtml = xsltProcessor.transformToFragment( NodeXML, document); if(document.getElementById(Zone)) { document.getElementById(Zone).innerHTML = ""; document.getElementById(Zone).appendChild( xhtml); } } //il faut maintenant fusionner
Mais le passage avec le navigateur IE11 (augmentation de la sécurité) m'empêche de garder le même fonctionnement.
ActiveXObject refusé.
dec ce fait, je ne peux plus faireJ'ai vu qu'il était possible d'intégrer directement la feuille de style xsl dans le fichier xml avec la balise
Code : Sélectionner tout - Visualiser dans une fenêtre à part xhtml = NodeXML.transformNode( NodeXSL);.
Code : Sélectionner tout - Visualiser dans une fenêtre à part <?xml-stylesheet type="text/xsl" href="webs_Alerte.xsl"?>
Cela fonctionne bien.
Mais, cela me pose 2 problèmes.
1- Comment puis-je encore visualiser le retour xml sans utilisation de la feuille XSl, qui y est mentionnée ?
Cela est utile si on n'est pas sûr de la bonne stucture du XML retourné ou de son contenu, ou s'il est correct mais que c'est la feuille de style xsl, posant problème, qui bloque l'affichage.
2- Mon nouveau code donne ceci, mais j'ai du tricher pour afficher le résultat:
Code JavaScript : 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
58
59
60 function RecupereAlerte(Qui,Login) { var url="../../Web_Services/webs_Alerte.php?CODEUT=" + Qui + "&LOG=" + Login + "&DIV=idDIVAlerte"; var urlxsl="../../Web_Services/webs_Alerte.xsl"; postHTML(url, urlxsl, "Meme","idDIVAlerte"); } //Chargement des fichiers XML et XSL pour les navigateurs Firefox Chrome Opera ... function loadXML(xmlPath) { var xmlhttp = new window.XMLHttpRequest(); xmlhttp.open("GET", xmlPath, false); xmlhttp.send(null); var xmlDoc = xmlhttp.responseXML.documentElement; return xmlDoc; } // Generation du rendu function postHTML(xmlPath, xslPath, page, elementId) { //if (document.implementation && document.implementation.createDocument) //if( !(window.ActiveXObject)) if(1==0) { // script pour tous les navigateurs Firefox Opera ... var xslDocument = loadXML(xslPath); var xmlDocument = loadXML(xmlPath); var xsltProcessor=new XSLTProcessor(); xsltProcessor.importStylesheet(xslDocument); var htmlCode = xsltProcessor.transformToFragment(xmlDocument,document); document.getElementById(DivId).appendChild(htmlCode); } else { if (window.ActiveXObject) { // script pour IE // Chargement XML var xml = new ActiveXObject("Microsoft.XMLDOM") xml.async = false xml.load(xmlPath) // Chargement XSL var xsl = new ActiveXObject("Microsoft.XMLDOM") xsl.async = false xsl.load(xslPath) // Transformation document.getElementById(elementId).innerHTML = xml.transformNode(xsl); } else { alert("Xslt non supporté"); } } }
J’ai du mettre en haut de la fonction postHTML :car sinon
Code : Sélectionner tout - Visualiser dans une fenêtre à part if(1==0)
Je ne vais jamais dans le else
Les 2 autres lignes n’ont rien donné :
Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 //if (document.implementation && document.implementation.createDocument) //if( !(window.ActiveXObject))
Merci pour vos conseils
Partager