Ich versuche, ein Skript automatisch eine XML-Datei in mehrere HTML-Dateien mit verschiedenen XSLT-Formatvorlagen zu transformieren. Wie auch immer ich es versuche, ich bekomme Fehler. Ich habe es sowohl in VBScript als auch in JScript ausprobiert, und beide geben mir Fehler. Die XML-Datei ist 537 KB und die XSL-Datei ist 5 KB.JScript/VBScript-Fehler
Hier ist Iteration 1 in JScript. Dieses Skript funktioniert für eines meiner Stylesheets (ein Stylesheet, das eine kleinere HTML-Datei erstellt), aber auf einem Stylesheet, das eine größere HTML-Datei erstellt, gibt es mir einen "ungültigen Prozeduraufruf oder -argument" auf outstr ‚t Rückkehr richtig) Fehler:
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();
Also hier ist Iteration 2, statt die TransformNodeToObject Methode. In diesem Fall erhalte ich einen „nicht Angegeben Fehler“ Code 80004005 in 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");
Meine Intuition sagt, dass der Prozessor nicht nur eine Datei zu erstellen, dass großen umgehen kann. Ist das richtig oder mache ich etwas falsch? Wenn es nur ein Größenproblem ist, gibt es eine andere Bibliothek/ein anderes Objekt, die/das ich in Vbscript/Jscript verwenden kann, um die Aufgabe zu erledigen?
Tomalak, Danke für die Hilfe. Ich habe alles ausprobiert. xml/xsl war wohlgeformt. Installation/Neuinstallation machte keinen Unterschied. Ich konnte es auf einer anderen Maschine reproduzieren. 4.0 ergab im Grunde die gleichen Ergebnisse (obwohl es bei Iteration 2 keine Fehler gab, sondern eine leere HTML-Datei erzeugte). msxsl.exe funktionierte großartig, so dass es die zu verwendende Lösung sein könnte, obwohl es frustrierend ist, dass ich es nicht mit dem Scripting arbeiten kann.Ich habe die Dateien auf http://www.obryantfamilytree.com/TestXSL.zip hochgeladen, meistens aus Neugierde, da die msxsl.exe-Lösung funktioniert, also wenn Sie so geneigt sind ... Nochmals vielen Dank. –
Der Fehler ist - Sie können "TransformNodeToObject" und " " nicht zusammen verwenden. Ändern Sie es in " " und es wird funktionieren. (Hinweis: "TransformNodeToObject" versucht, die Ausgabe in einem XML-DOM zu speichern.) –
Tomalak
Darüber hinaus ist es im Allgemeinen empfehlenswert, das Transformationsergebnis über eine DOMDocument.save() zu speichern. Die Verwendung einer Zeichenfolge und eines TextStream-Objekts kann die Kohärenz zwischen deklarierter und tatsächlicher Codierung beeinträchtigen. – Tomalak