【问题标题】:successor of msxsl.exe?msxsl.exe 的继任者?
【发布时间】:2011-01-04 17:17:48
【问题描述】:

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

【问题讨论】:

    标签: xslt msxml6 msxsl


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多