2010-01-13 5 views
9

Zamierzamy przenieść naszą frameworka z msxml4 do msxml6. My używamy jeszcze msxsl.exe. Wydaje się, że obsługuje tylko wersje MSXML do 4.0, jak mówi mi wiersz poleceń msxsl.exe -u wersja 6.0 . Czy istnieje następca msxsl.exe? Dowolny alternatywny procesor linii poleceń?następca msxsl.exe?

Odpowiedz

6

Istnieje wiele sposobów wymiany istniejącego procesora, zależy to tylko od poziomu wymaganej funkcjonalności i od tego, czy potrzebujesz funkcji specyficznej dla MSXML. Na przykład jest xsltproc, który jest częścią biblioteki libxslt (może na przykład otrzymać kilka plików binarnych z systemu Windows od here). Strona This umożliwia szybką zamianę w języku C#, ale obie zmieniają użycie wiersza poleceń i mogą nie implementować tych samych rozszerzeń MSXML (na pewno xsltproc nie).

Jeśli interesuje Cię prosty procesor wiersza poleceń, który używa MSXML 6, możesz zrobić coś gorszego niż przy użyciu prostej aplikacji JScript. Zapisz poniższy kod jako xsltr.js i uruchom jako 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); 
} 

nadal istnieje uzasadnienie nie można używać msxsl? Wersja 4.0 MSXML nigdy nie była standardową instalacją, więc zawsze musiałbyś ją zainstalować ręcznie (choć myślę, że przyszedł z pakietem Office w pewnym momencie). Czy nie możesz wdrożyć wersji 4 na komputerach, na których chcesz wykonać przetwarzanie?