наследник msxsl.exe? - PullRequest
       20

наследник msxsl.exe?

9 голосов
/ 13 января 2010

Мы намерены перенести нашу инфраструктуру с msxml4 на msxml6 Мы где еще использовали msxsl.exe. Кажется, что поддерживает только версии MSXML до 4.0, в качестве командной строки msxsl.exe -u версия 6.0 говорит мне. Есть ли преемник msxsl.exe? Любой альтернативный процессор командной строки?

1 Ответ

6 голосов
/ 13 января 2010

Есть несколько способов заменить существующий процессор, это зависит только от того, какой уровень функциональности вам требуется и нужна ли вам особая функциональность 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);
}

Тем не менее, есть ли обоснование, по которому вы не можете использовать msxsl? Версия 4.0 MSXML никогда не была стандартной установкой, поэтому вам всегда приходилось устанавливать ее вручную (хотя я думаю, что в какой-то момент она шла с Office). Не могли бы вы развернуть версию 4 на машинах, на которых вам нужно выполнить обработку?

...