Bonjour à tous,
Je viens une fois de plus vous faire part de mes problèmes de XML/XSL.
Je vais essayer d'expliquer clairement la situation. Sur mon site, lors du clik sur un lien, voici ce qui se passe :
1/. Un fichier XML est chargé (à l'aide de l'objet XMLHttpRequest).
2/. Un fichier XSL est chargé (à l'aide de l'objet XMLHttpRequest).
3/. Le fichier XML est transformé en XHTML grâce au XSL et le tout est affiché dans un "div".
Les chargements se font de manière synchrone et jusque là tout va bien. Cependant le mode synchrone, c'est pas ce qu'il y a de mieux pour l'utilisateur donc j'essaye d'utiliser le mode asynchrone.
Voici le code JS :
Et la page PHP :
Pour passer en mode asynchrone, je pensais que modifier uniquement les lignes suivantes suffirait or ce n'est pas le cas.
Y a t-il des choses particulières à faire ?
Merci,
LoK.
Je viens une fois de plus vous faire part de mes problèmes de XML/XSL.

Je vais essayer d'expliquer clairement la situation. Sur mon site, lors du clik sur un lien, voici ce qui se passe :
1/. Un fichier XML est chargé (à l'aide de l'objet XMLHttpRequest).
2/. Un fichier XSL est chargé (à l'aide de l'objet XMLHttpRequest).
3/. Le fichier XML est transformé en XHTML grâce au XSL et le tout est affiché dans un "div".
Les chargements se font de manière synchrone et jusque là tout va bien. Cependant le mode synchrone, c'est pas ce qu'il y a de mieux pour l'utilisateur donc j'essaye d'utiliser le mode asynchrone.
Voici le code JS :
/****************************************************/
/****** Classe XMLTOOL ******************************/
/****************************************************/
// Constructeur
// xmlURL : url du fichier xmkl source
// xslURL : url du fichier xsl source
// Le constructeur charge les 2 fichiers
function XMLTool(xmlURL,xslURL)
{
this.xml = this.loadXML(xmlURL);
this.xsl = this.loadXML(xslURL);
}
// Méthode init
// id = identifiant de l'élement dans lequel il faut mettre le HTML généré
// Construit le HTML à parir des fichiers xml et xsl et l'affiche dans l'élément ayant le id spécifié
XMLTool.prototype.init=function(id)
{
this.transform(this.xml,this.xsl,id);
}
//Méthode loadXML
// url : url du fichier à charger
// charge de manière synchrone le fichier xml ou xsl spécifié
XMLTool.prototype.loadXML=function(url)
{
try
{
if (document.implementation && document.implementation.createDocument)
// Cas Firefox
{
xmlDoc = document.implementation.createDocument('', '', null);
xmlDoc.async=false;
xmlDoc.load(url);
}
else if (window.ActiveXObject)
{
try
{
xmlDoc = new ActiveXObject('Msxml2.XMLDOM');
} catch (e)
{
xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
}
xmlDoc.async = false;
xmlDoc.load(url);
}
else if (window.XMLHttpRequest)
// autre ??
{
xmlDoc = new XMLHttpRequest();
xmlDoc.overrideMimeType('text/xml');
xmlDoc.open('GET', url, false);
xmlDoc.send(null);
if (this.xmlDoc.readyState == 4 && xhr.status == 200) xmlDoc = xmlDoc.responseXML;
}
}
catch (e)
{
alert(e);
return e;
}
return xmlDoc;
}
// Méthode tranform
// xml : document xml chargé
// xsl document xsl chargé
// id : id dans lequel il faut généré le HTML
// Génère le HTML et l'écrit dans l'élément spécifié par son id
XMLTool.prototype.transform=function(xml, xsl, id)
{
try {
if (window.XSLTProcessor)
// FireFox
{
var xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
var fragment = xsltProcessor.transformToFragment(xml, window.document);
var target = document.getElementById(id);
rng = document.createRange();
rng.setStartBefore(target);
while (target.hasChildNodes())target.removeChild(target.lastChild);
target.appendChild(fragment);
} else
if (window.ActiveXObject)
//Windows
{
var target = document.getElementById(id);
target.innerHTML = xml.transformNode(xsl);
}
} catch (e)
{
alert(e);
return e;
}
}
Et la page PHP :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-Transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
script type="text/javascript" src="./XMLTool.js"></script>
<script type="text/javascript">
function go(xml_file, xsl_file) {
var a=new XMLTool(xml_file,xsl_file);
a.init('centre');
}
</script>
</head>
<body>
<a href="javascript:go('test.xml','test.xsl')">Test</a>
</body>
</html>
Pour passer en mode asynchrone, je pensais que modifier uniquement les lignes suivantes suffirait or ce n'est pas le cas.
xmlDoc.async=false;
...
xmlDoc.async=false;
...
xmlDoc.open('GET', url, false);
Y a t-il des choses particulières à faire ?
Merci,
LoK.