我目前正在處理一個涉及大量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
函數時得到的。首先,我可以通過參數步進(模板匹配)之後,會顯示樣式表的代碼,我得到這個:
如果任何人有任何想法,爲什麼它不工作或有獲得的另一種方式它的工作我會非常感謝:)。
謝謝,
亞歷
關於該錯誤:這是否與VS 2008一起工作?我只是讓它與從光盤上的文件加載的XSLT一起工作。 – 2010-05-28 21:39:15
我剛剛用VS 2008 SP1進行了測試。有用。 – mfilimonov 2010-06-03 14:59:53