2010-01-13 14 views
9

Wir beabsichtigen, unser Framework von msxml4 nach msxml6 zu migrieren. Wir verwendeten msxsl.exe noch. Es scheint nur MSXML-Versionen bis zu 4.0 zu unterstützen, als Befehlszeile msxsl.exe -u Version 6.0 sagt mir. Gibt es einen Nachfolger von msxsl.exe? Jeder alternative Befehlszeilenprozessor?Nachfolger von msxsl.exe?

Antwort

6

Es gibt eine Reihe von Möglichkeiten, wie Sie den vorhandenen Prozessor ersetzen können. Es hängt nur davon ab, welche Funktionalität Sie benötigen und ob Sie MSXML-spezifische Funktionen benötigen. Zum Beispiel gibt es xsltproc, die Teil von libxslt ist (kann einige Windows-Binärdateien von here zum Beispiel bekommen). This Seite gibt Ihnen einen schnellen Ersatz in C#, aber beide ändern die Befehlszeilennutzung und möglicherweise nicht die gleichen MSXML-Erweiterungen (xsltproc sicherlich nicht).

Wenn Sie nur an einem einfachen Befehlszeilenprozessor interessiert sind, der MSXML 6 verwendet, können Sie schlechter arbeiten als mit einer einfachen JScript-Anwendung. Speichern Sie den folgenden Code als xsltr.js und laufen als cscript msltr.js input.xml template.xsl output.txt:

var adTypeBinary = 1; 
var adSaveCreateOverWrite = 2; 
var adSaveCreateNotExist = 1; 

try 
{ 
    var args = WScript.Arguments; 

    if(args.length < 3) 
    { 
     WScript.Echo("Usage: xsltr.js file.xml file.xsl output.txt"); 
     WScript.Quit(1); 
    } 
    else 
    { 
     var xml = args(0); 
     var xsl = args(1); 
     var out = args(2); 

     var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.6.0"); 
     var xslDoc = new ActiveXObject("Msxml2.DOMDocument.6.0"); 

     /* Create a binary IStream */ 
     var outDoc = new ActiveXObject("ADODB.Stream"); 
     outDoc.type = adTypeBinary; 
     outDoc.open(); 

     if(xmlDoc.load(xml) == false) 
     { 
      throw new Error("Could not load XML document " + xmlDoc.parseError.reason); 
     } 

     if(xslDoc.load(xsl) == false) 
     { 
      throw new Error("Could not load XSL document " + xslDoc.parseError.reason);   
     } 

     xmlDoc.transformNodeToObject(xslDoc, outDoc); 
     outDoc.SaveToFile(out, adSaveCreateOverWrite); 
    } 
} 
catch(e) 
{ 
    WScript.Echo(e.message); 
    WScript.Quit(1); 
} 

Noch ist es ein Grundprinzip Sie nicht msxsl verwenden kann? Version 4.0 von MSXML war noch nie eine Standardinstallation, so dass Sie es immer manuell installieren mussten (obwohl ich denke, dass es zu einem bestimmten Zeitpunkt mit Office geliefert wurde). Können Sie Version 4 nicht auf den Computern bereitstellen, auf denen Sie die Verarbeitung durchführen müssen?