我们打算将我们的框架从 msxml4 迁移到 msxml6。我们还在哪里使用 msxsl.exe。正如命令行 msxsl.exe -u 6.0 版告诉我的那样,它似乎只支持最高 4.0 的 MSXML 版本。是否有 msxsl.exe 的继任者?任何替代的命令行处理器?
问问题
13837 次
1 回答
11
您可以通过多种方式替换现有处理器,这取决于您需要什么级别的功能以及您是否需要特定于 MSXML 的功能。例如,有一个xsltproc,它是 libxslt 的一部分(例如,可以从这里获取一些 Windows 二进制文件)。此页面为您提供了 C# 中的快速替换,但两者都更改了命令行用法,并且可能不会实现相同的 MSXML 扩展(xsltproc 当然不会)。
如果您只是对使用 MSXML 6 的简单命令行处理器感兴趣,那么您可能会比使用简单的 JScript 应用程序做得更糟。将以下代码另存为xsltr.js并作为cscript xsltr.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);
}
仍然有你不能使用 msxsl 的理由吗?MSXML 4.0 版从来都不是标准安装,因此您总是必须手动安装它(尽管我认为它曾经与 Office 一起提供)。您不能在需要进行处理的机器上部署版本 4 吗?
于 2010-01-13T18:02:35.643 回答