Page 1 sur 1
Transformation XSLT avec javascript...
Publié : 27 janv. 2006, 05:20
par Spack
Salut,
J'essais de faire une transformation XSLT d'un fichier XML côté client à l'aide de javascript... Pour ce faire, je charge mes deux fichiers
Code : Tout sélectionner
this.xmlDoc = document.implementation.createDocument('', 'doc', null);
this.xmlDoc.load(url);
Puis et voici le code censé faire la transformation
Code : Tout sélectionner
var fragment;
var xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
fragment = xsltProcessor.transformToFragment(xml, document);
var tmp = document.getElementById(id);
tmp.innerHTML = fragment;
Mais malheureusement, j'ai cette erreur
[Exception... "Component returned failure code: 0x80600001 [nsIXSLTProcessor.importStylesheet]"
à la ligne
xsltProcessor.importStylesheet(xsl);...
Pouvez-vous me dire quel est le problème

Publié : 27 janv. 2006, 08:54
par calimo
Avec si peu de code, pas vraiment, mais si tu avais posté dans la rubrique "développement web" tu aurais évité de voir ton message perdu dans les abysses de cette rubrique avant que quelqu'un de compétent ne passe

Publié : 27 janv. 2006, 13:15
par martin
- vérifier si les url des document chargés par load() sont valides (je sais, basique, mais on sait jamais...).
- il se peut qu'il faille passer par un evenement onload (il se peut que load soit asynchrone, je ne sais plus). Facile à vérifier, place un alert("toto") avant l'import de la feuille de style, çà laissera le temps de charger le fichier si c'est asynchrone.
un lien
Le plus simple c'est quand même de mettre un point d'arrêt dans le debugger Venkman, et de vérifier ce que contienne tes variables xsl et xml.
Publié : 27 janv. 2006, 15:14
par Spack
calimo a écrit :Avec si peu de code, pas vraiment, mais si tu avais posté dans la rubrique "développement web" tu aurais évité de voir ton message perdu dans les abysses de cette rubrique avant que quelqu'un de compétent ne passe

Oui je me suis emmêlé les pinceaux lors du post...
Voici quelques explications...
J'ai deux classes
xmlParser chargement et parcours de fichier xml mais dans le cas présent je n'utilise que la fonction de chargement...
Code : Tout sélectionner
function loadXML(url)
{
/* chargement du fichier XML */
try {
// navigateur basé sur Gecko
if (document.implementation && document.implementation.createDocument)
{
this.xmlDoc = document.implementation.createDocument('', 'doc', null);
this.xmlDoc.load(url);
// ActiveX pour Internet Explorer
} else if (window.ActiveXObject) {
try {
this.xmlDoc = new ActiveXObject('Msxml2.XMLDOM');
} catch (e) {
this.xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
}
this.xmlDoc.async = false;
this.xmlDoc.load(url);
// à l'aide de lobjet XMLHTTPRequest
} else if (window.XMLHttpRequest) {
this.xmlDoc = new XMLHttpRequest();
this.xmlDoc.overrideMimeType('text/xml');
this.xmlDoc.open('GET', url, false);
this.xmlDoc.send(null);
if (this.xmlDoc.readyState == 4)
this.xmlDoc = this.xmlDoc.responseXML.documentElement;
}
} catch (e) {
alert(e);
return false;
}
return true;
}
Et ensuite une classe
xmlManager qui traite les fichiers xml dans le cas présent, je n'utilise que la fonction
transform(xml, xsl, id)...
Code : Tout sélectionner
function transform(xml, xsl, id)
{
xml = xml.xmlDoc;
xsl = xsl.xmlDoc;
try {
// Gecko
if (window.XSLTProcessor)
{
var fragment;
var xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
fragment = xsltProcessor.transformToFragment(xml, document);
var tmp = document.getElementById(id);
tmp.innerHTML = fragment;
} else if (window.ActiveXObject) {
var target = document.getElementById(id);
target.innerHTML = xml.transformNode(xsl);
}
} catch (e) {
return e;
}
}
j'appelle ces fonctions après avoir contruit les objet respectifs avec:
Code : Tout sélectionner
xml.loadXML('./news.xml');
xsl.loadXML('./news.xml');
news.transform(xml, xsl, 'news');
Publié : 27 janv. 2006, 16:19
par martin
franchement, installe
Venkman dans ton firefox, place des points d'arrêts et surveille tes variables (et par la suite tu ne pourras plus t'en passer).
Là j'ai du mal à percevoir ta construction des objets, c'est peut être elle qui est en cause.
Publié : 27 janv. 2006, 16:30
par Spack
martin a écrit :franchement, installe
Venkman dans ton firefox, place des points d'arrêts et surveille tes variables (et par la suite tu ne pourras plus t'en passer).
Là j'ai du mal à percevoir ta construction des objets, c'est peut être elle qui est en cause.
J'ai déjà installer Venkman...
Code : Tout sélectionner
xml.loadXML('./news.xml');
xsl.loadXML('./news.xml');
news.transform(xml, xsl, 'news');
Si on regarde bien, on voit qu'en fait je charge deux fois le fichier
news.xml ou lieu de mettre
news.xsl...

Tout cela pour une simple lettre...
L'erreur est humaine

Publié : 27 janv. 2006, 18:36
par martin
ah ben oui

, c'est le premier point de recherche que j'avais proposé

, vérifier les urls .