msxsl.exe的后继者?

时间:2010-01-13 16:15:15

标签: xslt msxml6 msxsl

我们打算将我们的框架从msxml4迁移到msxml6。 我们在哪里使用msxsl.exe。 它似乎仅支持最高4.0的MSXML版本,作为命令行 msxsl.exe -u 6.0版 告诉我。 是否有msxsl.exe的后继者? 任何替代命令行处理器?

1 个答案:

答案 0 :(得分:6)

您可以通过多种方式替换现有处理器,这取决于您需要的功能级别以及是否需要MSXML特定功能。例如, xsltproc 是libxslt的一部分(例如,可以从here 获取一些Windows二进制文件)。 This页面为您提供了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);
}

还有一个理由你不能使用msxsl吗? MSXML 4.0版从来就不是标准安装,所以你总是需要手动安装它(虽然我认为它在某个时候附带了Office)。您是否可以在需要进行处理的机器上部署版本4?