2010-01-13 1 views
9

프레임 워크를 msxml4에서 msxml6으로 마이그레이션하려고합니다. 우리는 msxsl.exe를 아직 사용하지 않습니다. 명령 줄 msxsl.exe -u 버전 6.0 이 나와서 4.0까지의 MSXML 버전 만 지원하는 것으로 보입니다. msxsl.exe의 후속 버전이 있습니까? 대체 명령 줄 프로세서가 있습니까?msxsl.exe의 후속 버전?

답변

6

기존 프로세서를 대체 할 수있는 방법에는 여러 가지가 있으며 필요한 기능 수준과 MSXML 특정 기능의 필요 여부에 따라 달라집니다. 예를 들어 xsltproc은 libxslt의 일부입니다 (예 : here에서 일부 Windows 바이너리를 얻을 수 있음). This 페이지에서 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를 배포 할 수 없습니까?