2013-01-04 30 views
2

我已經熟悉將輸入參數傳遞給XSLT CompiledTransformation類,以便解析器負責在XSL文件中提供的處理指令中使用Param的XSL文件。來自XSLT的輸出參數

有沒有一種方法可以將get output param(說節點或別的東西的值)從XSLT轉換爲C#等主機語言?

XslCompiledTransform xslTransform = new XslCompiledTransform(); 

string strXmlOutput = string.Empty; 
StringWriter swXmlOutput = null; 
MemoryStream objMemoryStream = null; 
XPathDocument xpathXmlOrig = new XPathDocument(string_xmlInput); 
swXmlOutput = new StringWriter(); 
objMemoryStream = new MemoryStream(); 

xslArg.AddParam("TESTING", "", SomeVar); 
XsltSettings xslsettings = new XsltSettings(false, true); 

xslTransform.Load(string_xslInput, xslsettings, new XmlUrlResolver()); 
xslTransform.Transform(xpathXmlOrig, xslArg, objMemoryStream); 

此代碼確實輸出轉換XML,但我的問題是,我們可以舉一個值從XSL穿越 - (XSLT文件)輸出參數?

事情是這樣的:

xslArg.OutputParam("testing"); //Something like this? 
........ 
........ 
xslTransform.Transform(xpathXmlOrig, xslArg, objMemoryStream); 
string outputparam = xslArg.GetParam("testing"); //ideal way of getting param after traformation! 

不XSLT這樣的事情提供了範圍?

+1

我認爲這是不可能的。也許你可以使用擴展類來調用你自己的邏輯來從xslt傳遞值,但它似乎不是一個正確的方法。爲什麼不能解析結果xslt? –

+1

XSLT是一種*功能語言*。除此之外,這意味着XSLT不能/不會修改'xsl:variable'或'xsl:param'。對於一種方法來做你想看看這裏:http://www.xml.com/pub/a/2003/08/06/exslt.html –

+0

@DimitreNovatchev,你好,它不需要修改任何參數!我期待XSLT有一些輸出參數或屬性,XSL可以與主機程序進行通信!順便說一句,Flynn提到關於''!我會嘗試這一點,並返回結果..感謝您的迴應! :) – Enthusiastic

回答

0

在C#中,最好的辦法是把<xsl:message>說明在您的XSLT代碼,並掛接到XsltMessageEncountered事件上XsltArgumentList類。

通過觀察應用程序的輸出,在沒有事件處理程序的情況下,您可以測試它在不掛鉤事件的情況下爲您提供正確的輸出,並將消息傳送到標準輸出。

+0

謝謝..所以我可以將''的內容存儲到一個字符串或某處? – Enthusiastic

+0

但是你喜歡。在事件參數上有一個'string'類型的'Message'屬性,你可以做任何你需要做的事情。 – Flynn1179

+0

,讓我的一天:)我會嘗試並接受你的答案!感謝您幫助弗林:) – Enthusiastic