2012-07-12 25 views
0

嘿,我試圖編寫一個xslt模板,它使用msxsl從web.config appSetting創建一個超鏈接。每次我嘗試運行代碼時,它都會告訴我,我已經在腳本中聲明瞭兩次c#方法。代碼如下:msxsl:cs在xslt函數中的腳本聲明瞭兩次錯誤

<?xml version="1.0" encoding="utf-8"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    xmlns:files="urn:my-script" > 
     <msxsl:script implements-prefix="files" language="CSharp"> 
    <msxsl:assembly name="System.Configuration"/> 
    <msxsl:using namespace="System.Configuration"/> 
    <![CDATA[ 
    public string LinkFile() 
    { 
     string link = System.Configuration.ConfigurationManager.AppSettings["fileUrl"]; 
     return link; 
    } 
    ]]> 
</msxsl:script> 

<xsl:template name="GenerateLinkFile"> 
    <xsl:param name="fileName"/> 
    <xsl:param name="fileId"/> 
    <xsl:choose> 
     <xsl:when test="$fileName = ''"> 
      <xsl:value-of select="$fileName"/> 
     </xsl:when> 
     <xsl:otherwise> 
      <a href="files:LinkFile()"> 
       <xsl:value-of select="$fileName"/> 
      </a> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 
</xsl:stylesheet> 

我得到的錯誤是作爲運行如下當它試圖生成超鏈接: System.Xml.Xsl.XslLoadException:類型「System.Xml.Xsl .CompiledQuery.Script1'已經使用相同的參數類型定義了一個名爲'LinkFile'的成員。

+1

這絕對是您使用的XSLT嗎?它形成嚴重;例如,xsl:stylesheet元素不以'>'結尾,並且沒有匹配的。當我添加這些時,你的XSLT編譯並運行 - 這讓我想知道它是否是一個數據問題。你有一個示例web.config文件,你正在運行這個?你在用什麼版本的.Net? – dash 2012-07-12 22:02:03

+0

我忘了關閉這兩個標籤,這些標籤都包含在我的代碼中,我不能包含web.config,但錯誤顯示它是代碼中的這個位置(行號是方法聲明和下面的行)。這不是數據問題,因爲它試圖調用該方法,並認爲有多個 – GFXGunblade 2012-07-13 12:17:07

+1

我將其與一個示例XML文件進行了對比,它對我來說很有用,這也讓我想知道您正在使用的.Net版本是什麼,如果您是在變換中引用其他XSLT模板 - 其中一個可能會聲明該函數? – dash 2012-07-13 13:43:51

回答

2

我對示例XML文件運行了您的XSLT,並且運行良好;這讓我相信你可能從其他XSLT文件多次調用這個XSLT。

處理這個問題的最好方法是,如果你有一個根變換調用其他變換,要從那裏包含它,所以它只被引用一次;目的是確保函數僅在整個變換中包含一次,否則會遇到您所看到的錯誤。

或者,可以獨立調用此轉換 - 一種常用方法是將XSLT依次應用於源文檔,並逐個執行一組轉換。

相關問題