Visualiser le contenu de fichier XML, sans utiliser la feuille de style XSl, qui y est nommée
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:
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 faire
Code:
xhtml = NodeXML.transformNode( NodeXSL);
J'ai vu qu'il était possible d'intégrer directement la feuille de style xsl dans le fichier xml avec la balise
Code:
<?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:
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
Je ne vais jamais dans le else
Les 2 autres lignes n’ont rien donné :
Code:
1 2 3
|
//if (document.implementation && document.implementation.createDocument)
//if( !(window.ActiveXObject)) |
Merci pour vos conseils