2013-12-16 33 views
2

現在我可以在我的XSLT文件中包含C#代碼,並且我在整個XSLT文件中都沒有問題引用它。在我的XSL文件中包含一個C#(.cs)文件,以便我可以使用intellisense?

XSLT文件:

<xsl:import href="secondXSLFile.xsl" /> 

XSLT文件(secondXSLFile.xsl)與C#代碼:

<msxsl:script implements-prefix="myCode" language="C#"> 
<![CDATA[ 
    public string ACoolFunction(string str1, string str2) 
    { //some code } 
]]> 
</msxsl:script> 

然而,當我在Visual Studio中,我在第二XSLT編輯C#代碼上面的文件,我沒有在代碼中獲得智能感知。所以,我的問題是這樣的:是否可以在上面的第一個XSLT中引用實際的.cs文件,而不是引用第二個XSLT文件?這樣我就可以在Visual Studio中打開我的.cs文件,並在那裏使用它。這將是一個非常大的文件,具有很多功能,所以這會更容易。

或者,如果有一種方法可以簡單地在msxsl:腳本塊中獲得智能感知,那麼對我的目的來說,這樣做也可以!

感謝您的幫助!

快速編輯:我基本上是想知道如果我可以做這樣的事情:

<xsl:import href="mycode.cs" /> 

回答

1

您是否知道XslCompiledTransform有另一種機制來調用.NET代碼,即extension objects?然後,您將編寫C#或VB代碼文件,在您的IDE中編譯它們,並使用http://msdn.microsoft.com/en-us/library/system.xml.xsl.xsltargumentlist.addextensionobject%28v=vs.110%29.aspx將實例或靜態類傳遞給XslCompiledTransformTransform方法。這樣你可以分離C#和XSLT代碼。正如你提到的ASP.NET,我必須指出,ASP.NET xml控件使用XslTransform,而不是`XslCompiledTransform,因此取決於您在ASP.NET中如何正確使用XSLT,您需要檢查與鏈接到的API不同的API 。

+0

我無意中標記了asp.net。這是一個非常大的後端項目,可以遍歷許多xsl文件並創建許多單獨的xml文件。我對此很陌生,但是我看到大量的重複代碼以及醜陋而冗長的xpath代碼,我希望通過C#更漂亮並希望更高效。所有這些都說了,我不知道你剛剛說了些什麼。我甚至沒有看到所有這些xsl文件的代碼。這聽起來像是從你所說的那樣,我應該去了解這件事情是如何真正被驅動的,然後挖掘到這個應用程序? – RandyWhirl

+0

@RandyWhirl,是的,檢查XSLT是如何執行的,通常你會使用'XslCompiledTransform'來做到這一點,並且你可以選擇使用擴展對象而不是'ms:script'來調用你的.NET代碼。 –

+0

這絕對是最好的答案,即使它是唯一的答案,謝謝!我去做了一些挖掘工作,並找到了推動整個過程的應用程序。得到它的代碼。在那裏,我非常清楚地看到在for循環中調用XSL文件的幾行代碼。這是我將要添加代碼的地方,您將這些代碼鏈接到我,以便我可以將類傳遞給XSL並允許它利用該功能。謝謝! – RandyWhirl

相關問題