2010-01-13 30 views
9

Chúng tôi dự định di chuyển khung của chúng tôi từ msxml4 sang msxml6. Chúng tôi đang sử dụng msxsl.exe. Dường như chỉ hỗ trợ các phiên bản MSXML tối đa 4.0, dưới dạng dòng lệnh msxsl.exe -u phiên bản 6.0 cho tôi biết. Có sự kế thừa của msxsl.exe không? Bất kỳ bộ xử lý dòng lệnh thay thế nào?kế thừa của msxsl.exe?

Trả lời

6

Có một số cách bạn có thể thay thế bộ xử lý hiện có, nó chỉ phụ thuộc vào mức độ chức năng bạn yêu cầu và liệu bạn có cần chức năng cụ thể của MSXML hay không. Ví dụ: có xsltproc là một phần của libxslt (ví dụ: có thể lấy một số nhị phân cửa sổ từ ví dụ here). This trang cung cấp cho bạn một sự thay thế nhanh chóng trong C# nhưng cả hai thay đổi việc sử dụng dòng lệnh và có thể không thực hiện cùng một phần mở rộng MSXML (xsltproc chắc chắn không).

Nếu bạn chỉ quan tâm đến một bộ xử lý dòng lệnh đơn giản sử dụng MSXML 6 thì bạn có thể làm tồi tệ hơn việc sử dụng một ứng dụng JScript đơn giản. Lưu đoạn mã sau như xsltr.js và chạy như 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); 
} 

Tuy là có được một lý do bạn không thể sử dụng msxsl? Phiên bản 4.0 của MSXML chưa bao giờ được cài đặt chuẩn, do đó bạn sẽ luôn phải cài đặt nó theo cách thủ công (mặc dù tôi nghĩ nó đi kèm với Office tại một thời điểm). Bạn có thể không triển khai phiên bản 4 trên các máy bạn cần thực hiện việc xử lý không?