Bonjour,
J'ai actuellement un script Javascript qui prend un document XML et un document XSLT et mouline le tout pour me sortir le résultat. Pour diverses raisons (problèmes de génération du XML, volumétrie...), j'aimerais passer le XML en input en JSON. Et donc, passer une string/structure JSON en entrée au processeur XSLT.
J'ai cherché diverses solutions. Le JSONT ne semble pas convenir car j'ai besoin de faire des calculs complexes sur les données avant de les rendre. J'ai également pensé retransformer manuellement mon JSON en XML côté client avant de le transformer mais je ne pense pas que ce soit optimisé niveau performances. Je ne me suis pas trop attardée sur le passage d'une string JSON au XSLT qui ferait lui même le parsing du contenu pour les mêmes raisons.
Ai-je raté d'autres alternatives ? Existe-t-il des méthodes sur les objets XSLTProcessor ou ActiveXObject("Microsoft.XMLDOM") pour construire un XML d'après du JSON ??
Pour info mon code actuel est le suivant :
Merci d'avance pour vos idées
J'ai actuellement un script Javascript qui prend un document XML et un document XSLT et mouline le tout pour me sortir le résultat. Pour diverses raisons (problèmes de génération du XML, volumétrie...), j'aimerais passer le XML en input en JSON. Et donc, passer une string/structure JSON en entrée au processeur XSLT.
J'ai cherché diverses solutions. Le JSONT ne semble pas convenir car j'ai besoin de faire des calculs complexes sur les données avant de les rendre. J'ai également pensé retransformer manuellement mon JSON en XML côté client avant de le transformer mais je ne pense pas que ce soit optimisé niveau performances. Je ne me suis pas trop attardée sur le passage d'une string JSON au XSLT qui ferait lui même le parsing du contenu pour les mêmes raisons.
Ai-je raté d'autres alternatives ? Existe-t-il des méthodes sur les objets XSLTProcessor ou ActiveXObject("Microsoft.XMLDOM") pour construire un XML d'après du JSON ??
Pour info mon code actuel est le suivant :
if(typeof(xml)!="undefined") {
if(window.XSLTProcessor) {
var xsltProcessor = new XSLTProcessor();
var parser = new DOMParser();
var xsltdoc = parser.parseFromString(xslt, "text/xml");
var xmldoc = parser.parseFromString(xml, "text/xml");
xsltProcessor.importStylesheet(xsltdoc);
html = xsltProcessor.transformToFragment(xmldoc, document);
document.getElementById("xsltcontent").innerHTML="";
document.getElementById("xsltcontent").appendChild(html.firstChild);
} else if (window.ActiveXObject) {
var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
xmldoc.async = false;
xmldoc.loadXML(xml);
var xsltdoc = new ActiveXObject("Microsoft.XMLDOM");
xsltdoc.async = false;
xsltdoc.loadXML(xslt);
html = xmldoc.transformNode(xsltdoc);
document.getElementById("xsltcontent").innerHTML = html;
}
else alert("'.gettext("Votre navigateur ne supporte pas les transformations XSLT.").'");
}
else {
document.getElementById("xsltcontent").innerHTML="";
alert("'.gettext("Impossible de charger les données.").'");
}
Merci d'avance pour vos idées