2010-05-21 56 views
11

我目前正在處理一個涉及大量XSLT轉換的項目,而且我需要一個調試器(我有XSLT的長度超過1000行,而且我沒有寫下他們:-)。在Visual Studio 2010中使用擴展對象調試XSLT

該項目是用C#編寫,並利用擴展的對象:

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

從我所知,在這種情況下,Visual Studio是唯一的工具,可以幫我調試轉換一步一步。由於擴展對象(當它到達引用其名稱空間的元素時會引發錯誤),因此靜態調試器無用。幸運的是,我發現了this thread這給了我一個起點(至少我知道它可以完成)。

在搜索MSDN之後,我發現可以進入變換的標準。他們列出了here。簡而言之:(XmlReader &共)

  • 的XML和XSLT必須經過具有IXmlLineInfo接口的類加載
  • XSLTCompiledTransform構造函數中使用的XML解析器是基於文件(XmlUriResolver應該工作)。
  • 樣式表應該是在本地計算機上或Intranet上的(?)

從我可以告訴,我符合所有這些標準,但它仍然無法正常工作。相關的代碼示例如下:

// [...] 

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); 

我真的不明白我做錯了什麼。我已經檢查了兩個XmlReader對象上的接口,並且它們實現了所需的接口。另外,BaseUriXmlResolver繼承自XmlUriResolver,並且樣式表存儲在本地。下面的截圖是我在進入Transform函數時得到的。首先,我可以通過參數步進(模板匹配)之後,會顯示樣式表的代碼,我得到這個:

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

如果任何人有任何想法,爲什麼它不工作或有獲得的另一種方式它的工作我會非常感謝:)。

謝謝,
亞歷

回答

2

我不知道關於擴展對象的使用,但正如我理解你的問題是,在VS2010中的代碼XSLT轉換的調試。 這裏是我們用來調試XSLT轉換功能:

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(); 
    } 

不幸的是,有一個bug與VS2010 XSLT調試器,這將使你的調試經驗比VS2008更糟糕。

+0

關於該錯誤:這是否與VS 2008一起工作?我只是讓它與從光盤上的文件加載的XSLT一起工作。 – 2010-05-28 21:39:15

+0

我剛剛用VS 2008 SP1進行了測試。有用。 – mfilimonov 2010-06-03 14:59:53

0

考慮使用XML Spy XSLT調試器進行調試。它一直適用於我。

+0

快速瀏覽後,我找不到任何與擴展對象相關的東西。它支持他們嗎? – 2010-06-29 10:50:21