我们打算将我们的框架从msxml4迁移到msxml6.我们在哪里使用msxsl.exe.它似乎只支持最高4.0的MSXML版本,因为命令行msxsl.exe -u 6.0版告诉我.是否有msxsl.exe的后继者?任何替代命令行处理器?
您可以通过多种方式替换现有处理器,这取决于您需要的功能级别以及是否需要MSXML特定功能.例如,xsltproc是libxslt的一部分(例如,可以从这里获取一些Windows二进制文件).此页面为您提供了C#的快速替换,但它们都更改了命令行用法,并且可能无法实现相同的MSXML扩展(xsltproc当然不会).
如果您只对使用MSXML 6的简单命令行处理器感兴趣,那么您可能比使用简单的JScript应用程序更糟糕.将以下代码保存为xsltr.js并运行为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);
}
Run Code Online (Sandbox Code Playgroud)
仍然有理由你不能使用msxsl?MSXML 4.0版本从来就不是标准安装,所以你总是需要手动安装它(虽然我认为它在某个时候附带了Office).您是否可以在需要进行处理的机器上部署版本4?