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 :
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
XSLT 1.0 dispose de la mécanique des templates nommés. Cela permet d'analyser récursivement des chaines de caractères.

J'ai déjà fait un analyseur grammatical de XPath 1.0 et un autre de CSS, les deux en XSLT 1.0 (http://www.agencexml.com/xsltforms).

Pas de difficulté particulière pour analyser du JSON, sauf qu'il faudra, bien sûr, rajouter un élément de document pour, préalablement, l'envelopper.
emilise a écrit :
[...] Existe-t-il des méthodes sur les objets XSLTProcessor ou ActiveXObject("Microsoft.XMLDOM") pour construire un XML d'après du JSON ??
[...]

JSON est quasiement un format abstrait à côté de XML. C'est vrai que ce serait lumineux d'avoir une méthode pour passer de l'un à l'autre.

Mais en même temps, les domaines ne sont pas les mêmes et les sources de standardisations non-plus. Alors il est compréhensible qu'une telle méthode n'existe peut-être pas (je ne travail personellement qu'avec les anciennes technologies, pour raisons de portabilité avec les dinosaures, alors si cette méthode existe, je ne le connais peut-être pas).

D'ailleurs, il existe tellement de format abstraits qu'on ne peut pas attendre qu'il existe des méthodes standards pour toutes les convertions possibles.

En même temps, il ne doit pas être trop sorcier d'écrire ta propre méthode de convertion. Et même si cela demande un petit travail, si tu pense que tu l'utilisera souvent ou que c'est vraiment important, alors l'investissement en vaut la peine.

Désolé de ne pas avoir donné de solution, mais je pensais que cet avis pourrait être utile.

(et puis au moins tu ne te sentira pas seule, et quelqu'un aura répondu à ta question... Smiley langue )

Sinon, bon courage pour tout Smiley biggrin

EDIT - Oops, en fait non, quelqu'un d'autre a répondu pendant que j'écrivais
Modifié par hibou57 (27 Apr 2009 - 14:14)
Merci pour vos réponses. Je pense effectivement que je vais devoir écrire la conversion Json -> Node-set en XSLT. J'espère que ce ne sera pas trop gourmand en temps de calcul!