J'essaie d'avoir un script qui transforme automatiquement un fichier xml en plusieurs fichiers html en utilisant différentes feuilles de style xslt. Cependant, quoi que j'essaie, j'ai des erreurs. Je l'ai essayé à la fois dans VBScript et JScript, et tous les deux me donnent des erreurs. Le fichier xml est de 537 Ko et le fichier xsl de 5 Ko.Erreur JScript/VBScript
Voici l'itération 1 dans JScript. Ce script fonctionne pour l'une de mes feuilles de style (une feuille de style qui crée un fichier html plus petit), mais sur une feuille de style qui crée un fichier html plus grand, elle me donne un "appel ou argument de procédure invalide". « t revenir correctement) erreur:
var xsl = new ActiveXObject("MSXML2.DomDocument.6.0");
xsl.async = false;
var boolval = xsl.load("../Commands/commands.xsl");
if(!boolval)
{
WScript.Echo("XSL load error");
WScript.Quit();
}
var xml = new ActiveXObject("MSXML2.DomDocument.6.0");
xml.async = false;
boolval = xml.load("../Commands/commands.xml")
if(!boolval)
{
WScript.Echo ("XML load error ");
WScript.Quit();
}
var fso = new ActiveXObject("Scripting.FileSystemObject");
var outstr = xml.transformNode(xsl);
var ofl = fso.CreateTextFile("../Commands/commands.html", true, false);
ofl.Write (outstr);
ofl.Close();
itération 2 est donc ici, en utilisant la méthode transformNodeToObject à la place. Dans ce cas, je reçois une « erreur non spécifiée » Code 80004005 à msxml6.dll:
var xsl = new ActiveXObject("MSXML2.DomDocument.6.0");
xsl.async = false;
var boolval = xsl.load("../Commands/commands.xsl");
if(!boolval)
{
WScript.Echo("XSL load error");
WScript.Quit();
}
var xml = new ActiveXObject("MSXML2.DomDocument.6.0");
xml.async = false;
boolval = xml.load("../Commands/commands.xml")
if(!boolval)
{
WScript.Echo ("XML load error ");
WScript.Quit();
}
var result = new ActiveXObject("MSXML2.DomDocument.6.0");
xml.transformNodeToObject(xsl, result);
result.save("../Commands/commands.html");
Mon intuition dit que le processeur ne peut pas gérer la création d'un fichier grand. Est-ce exact, ou fais-je quelque chose de mal? Si c'est juste un problème de taille, y a-t-il une autre bibliothèque/objet que je peux utiliser dans vbscript/jscript pour faire le travail?
Tomalak, Merci pour l'aide. J'ai essayé tout ce qui précède. xml/xsl était bien formé. L'installation/ré-installation n'a fait aucune différence. J'ai été capable de le reproduire sur une machine différente. 4.0 donnait essentiellement les mêmes résultats (bien qu'à l'itération 2 il ne donnait pas d'erreur mais produisait un fichier html vide). msxsl.exe a très bien fonctionné, donc c'est peut-être la solution à utiliser, même s'il est frustrant de ne pas pouvoir l'utiliser avec les scripts.J'ai téléchargé les fichiers sur http://www.obryantfamilytree.com/TestXSL.zip, surtout pour la curiosité, puisque la solution msxsl.exe fonctionne, donc si vous êtes si incliné ... Merci encore. –
L'erreur est - vous ne pouvez pas utiliser "TransformNodeToObject" et " " ensemble. Changez-le en " " et cela fonctionnera. (Indice: "TransformNodeToObject" tente de sauvegarder la sortie dans un DOM XML.) –
Tomalak
Au-delà, je pense qu'il est généralement recommandé d'enregistrer le résultat de la transformation via un DOMDocument.save(). L'utilisation d'une chaîne et d'un objet TextStream peut gâcher la cohérence entre le codage déclaré et le codage réel. – Tomalak