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