2010-01-13 28 views
9

Nous avons l'intention de migrer notre infrastructure de msxml4 à msxml6. Nous utilisions encore msxsl.exe. Il semble ne prendre en charge que les versions MSXML jusqu'à 4.0, comme la ligne de commande msxsl.exe -u version 6.0 me dit. Y a-t-il un successeur de msxsl.exe? Tout autre processeur de ligne de commande?successeur de msxsl.exe?

Répondre

6

Vous pouvez remplacer le processeur existant de plusieurs façons, cela dépend uniquement du niveau de fonctionnalité dont vous avez besoin et si vous avez besoin de fonctionnalités spécifiques à MSXML. Par exemple il y a xsltproc qui fait partie de libxslt (peut obtenir des binaires de Windows à partir de here par exemple). La page This vous permet un remplacement rapide en C# mais les deux modifient l'utilisation de la ligne de commande et risquent de ne pas implémenter les mêmes extensions MSXML (xsltproc certainement pas).

Si vous êtes simplement intéressé par un simple processeur de ligne de commande qui utilise MSXML 6, vous pourriez faire pire que d'utiliser une simple application JScript. Enregistrez le code suivant comme xsltr.js et courir comme cscript msltr.js input.xml template.xsl sortie.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); 
} 

est encore il y a une raison que vous ne pouvez pas utiliser msxsl? La version 4.0 de MSXML n'a jamais été une installation standard, donc vous auriez toujours dû l'installer manuellement (même si je pense que c'est arrivé avec Office à un moment donné). Ne pouvez-vous pas déployer la version 4 sur les machines dont vous avez besoin pour effectuer le traitement?