首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >msxsl.exe的接班人?

msxsl.exe的接班人?
EN

Stack Overflow用户
提问于 2010-01-13 16:15:15
回答 1查看 14.4K关注 0票数 10

我们打算将我们的框架从msxml4迁移到msxml6。我们现在还在使用msxsl.exe。它似乎只支持高达4.0的MSXML版本,正如命令行msxsl.exe -u Version6.0告诉我的那样。有msxsl.exe的继任者吗?有其他命令行处理器吗?

EN

回答 1

Stack Overflow用户

发布于 2010-01-13 18:02:35

有许多方法可以替换现有的处理器,这取决于您需要的功能级别以及是否需要特定于MSXML的功能。例如,有xsltproc,它是libxslt的一部分(例如,可以从这里获得一些窗口二进制文件)。页面为您提供了快速替换C#的方法,但这两种方法都会改变命令行的用法,并且可能不会实现相同的MSXML (xsltproc肯定不会)。

如果您只对使用MSXML 6的简单命令行处理器感兴趣,那么可能比使用简单的JScript应用程序更糟糕。将以下代码保存为xsltr.js,并以cscript xsltr.js input.xml template.xsl output.txt形式运行

代码语言:javascript
复制
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版呢?

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2058247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档