XSLT中的内联c#导致奇怪的行为

时间:2018-03-26 13:49:13

标签: c# linq xslt msxsl

我使用一些内联c#代码生成了一个xsl样式表。我需要在IIS上运行的asmx应用程序中使用它。这是样式表的摘录:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="xsl in lang user" xmlns:in="http://www.composite.net/ns/transformation/input/1.0" xmlns:lang="http://www.composite.net/ns/localization/1.0" xmlns:f="http://www.composite.net/ns/function/1.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="urn:my-scripts">
  <xsl:output omit-xml-declaration="no" indent="yes" method="text"/>
  <xsl:strip-space elements="*"/>

  <msxsl:script language="C#" implements-prefix="user">
  <msxsl:assembly name="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
  <msxsl:assembly name="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />


    <msxsl:using namespace="System.Collections.Generic"/>
    <msxsl:using namespace="System.Linq"/>
    <msxsl:using namespace="System.Xml.Linq"/>
    <![CDATA[

    private static string GenerateLine(string what, int howmuch)
    {
      var unuseful_var = "";
      return string.Concat(Enumerable.Repeat(what, howmuch).ToArray()).Substring(0, howmuch);
    }

    ]]>
  </msxsl:script>

  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="lines">
    <xsl:for-each select="line">
      <xsl:value-of select="user:GenerateLine("-", 10)" />
      <xsl:text>&#10;</xsl:text>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

在应用程序中,我以这种方式使用xsl:

XslCompiledTransform transformer = new XslCompiledTransform();
...
transformer.Load(xsltReader, new XsltSettings() { EnableScript = true }, null);
transformer.Transform(xmlReader, null, outputStream);
...

一切正常,在测试应用程序中当我在Web应用程序中部署完全相同的代码和xsl样式表时,突然间,xsl转换引发了以下异常:

  • 类型或命名空间名称&#39; var&#39;找不到(你错过了使用指令或汇编引用吗?)
  • &#39; System.Collections.Generic.IEnumerable&#39;不包含&#39; ToArray&#39;
  • 的定义

谷歌搜索我发现了这个(可能)related SO question但它仍然没有答案。

我通过一些解决方法解决了这些问题,但我当然想知道木头下发生了什么。

谢谢

0 个答案:

没有答案