0

大家好,我正在尝试编写一个 xslt 模板,该模板使用 msxsl 从 web.config appSetting 创建超链接。每次我尝试运行代码时,它都会告诉我我已经在脚本中声明了两次 c# 方法。代码如下:

    <?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: Type 'System.Xml.Xsl.CompiledQuery.Script1' already defined a member called 'LinkFile' with the same参数类型。

4

1 回答 1

3

我针对一个示例 XML 文件运行了您的 XSLT,它运行良好;这使我相信您可能从其他 XSLT 文件中多次调用此 XSLT。

处理这个问题的最好方法是,如果你有一个调用其他转换的根转换,从那里包含它,所以它只被引用一次;目的是确保该函数在整个转换过程中只包含一次,否则您将遇到您所看到的错误。

或者,独立调用此转换 - 一种常见的方法是将 XSLT 依次应用于源文档,一次执行一组转换。

于 2012-07-13T17:08:59.250 回答