2010-05-21 36 views
11

Tôi hiện đang làm việc trên một dự án có nhiều biến đổi XSLT và tôi thực sự cần một trình gỡ rối (Tôi có XSLT dài hơn 1000 dòng và tôi không viết chúng :-).Gỡ lỗi XSLT với các đối tượng mở rộng trong Visual Studio 2010

Dự án được viết bằng C# và tận dụng các đối tượng mở rộng:

xslArg.AddExtensionObject("urn:<obj>", new <Obj>()); 

Từ hiểu biết của tôi, trong tình huống này Visual Studio là công cụ duy nhất có thể giúp tôi gỡ rối những biến đổi bước-by-step. Trình gỡ lỗi tĩnh không được sử dụng vì các đối tượng mở rộng (nó ném một lỗi khi nó đến các phần tử tham chiếu đến không gian tên của chúng). May mắn thay, tôi đã tìm thấy this thread mà đã cho tôi một điểm khởi đầu (ít nhất tôi biết nó có thể được thực hiện).

Sau khi tìm kiếm MSDN, tôi đã tìm thấy các tiêu chí giúp bước vào biến đổi có thể. Chúng được liệt kê here. Nói tóm lại: (. XmlReader & đồng)

  • XML và XSLT phải được nạp qua một lớp học có giao diện IXmlLineInfo
  • resolver XML được sử dụng trong các nhà xây dựng XSLTCompiledTransform là tập tin dựa trên (XmlUriResolver nên làm việc).
  • stylesheet nên trên máy cục bộ hoặc trên mạng nội bộ (?)

Từ những gì tôi có thể nói, tôi vừa vặn tất cả các tiêu chí này, nhưng nó vẫn không hoạt động. Các mẫu mã có liên quan được đăng bên dưới:

// [...] 

xslTransform = new XslCompiledTransform(true); 

xslTransform.Load(XmlReader.Create(new StringReader(contents)), null, new BaseUriXmlResolver(xslLocalPath)); 

// [...] 

// I already had the xml loaded in an xmlDocument 
// so I have to convert to an XmlReader 
XmlTextReader r = new XmlTextReader(new StringReader(xmlDoc.OuterXml)); 

XsltArgumentList xslArg = new XsltArgumentList(); 
xslArg.AddExtensionObject("urn:[...]", new [...]()); 
xslTransform.Transform(r, xslArg, context.Response.Output); 

Tôi thực sự không hiểu những gì tôi đang làm sai. Tôi đã kiểm tra các giao diện trên cả hai đối tượng XmlReader và chúng thực hiện một yêu cầu. Ngoài ra, BaseUriXmlResolver kế thừa từ XmlUriResolver và biểu định kiểu được lưu trữ cục bộ. Ảnh chụp màn hình bên dưới là những gì tôi nhận được khi bước vào chức năng Transform. Trước tiên tôi có thể thấy mã stylesheet sau khi bước qua các thông số (trên mẫu trận đấu), tôi có được điều này:

The error I get when I step into the stylesheet http://img339.imageshack.us/img339/4153/scrxslterror.jpg

Nếu ai có bất kỳ ý tưởng tại sao nó không hoạt động hoặc có một cách khác để nhận được nó để làm việc tôi sẽ có nhiều nghĩa vụ :).

Cảm ơn,
Alex

Trả lời

2

Tôi không chắc chắn về việc sử dụng các đối tượng mở rộng nhưng như tôi hiểu vấn đề của bạn là với gỡ lỗi của biến đổi XSLT trong mã trong VS2010. Đây là chức năng mà chúng tôi sử dụng để chuyển đổi XSLT debug:

public string ApplyTransformation(string inputFilePath, string xsltFileContent) 
    { 
     XslCompiledTransform transform = new XslCompiledTransform(debugEnabled); 

     File.WriteAllText(xsltTempFilePath,xsltFileContent); 
     transform.Load(xsltTempFilePath, XsltSettings.TrustedXslt, new XmlUrlResolver()); 

     XmlReader reader = XmlReader.Create(inputFilePath); 
     StringWriter output = new StringWriter(); 
     XmlWriter writer = XmlWriter.Create(output,transform.OutputSettings); 
     transform.Transform(reader,writer); 
     return output.ToString(); 
    } 

Thật không may, có một bug với VS2010 XSLT debugger mà sẽ làm cho kinh nghiệm gỡ lỗi của bạn tồi tệ hơn trong VS2008.

+0

Về lỗi: Điều này có phù hợp với VS 2008 không? Tôi chỉ nhận được nó để làm việc với XSLT được tải từ một tập tin trên đĩa. –

+0

Tôi vừa thử nghiệm nó với VS 2008 SP1. Nó hoạt động. – mfilimonov

0

Xem xét gỡ lỗi bằng trình gỡ lỗi XSLT XML Spy. Nó làm việc cho tôi mọi lúc.

+0

Sau khi xem nhanh, tôi không thể tìm thấy bất cứ điều gì liên quan đến các đối tượng mở rộng. Nó có hỗ trợ họ không? –

Các vấn đề liên quan