.NET Xsl脚本转换结果未定义或导入"System.Object"

Chr*_*ris 6 c# xslt scripting xslcompiledtransform

XSL noobie但是卡住了!

我有一个使用c#脚本函数格式化日期的转换,当我在VS 2008并运行"show xml output"时这很好用,输出正是我想要的.

但是,当我尝试使用代码运行时,我得到错误

未定义或导入预定义类型"System.Object"

要调用转换的函数看起来像这样,它在我开始使用脚本之前非常基础和工作

public static string RunXSLT(string xsltFile, string inputXML)
{

    XslCompiledTransform transform = new XslCompiledTransform();
    XsltSettings settings = new XsltSettings();
    settings.EnableScript = true;

    transform.Load(xsltFile, settings, null);

    StringReader sReader = new StringReader(inputXML);
    XmlTextReader xmlTextReader = new XmlTextReader(sReader);

    //Create an XmlTextWriter which outputs to memory stream
    Stream stream = new MemoryStream();
    XmlWriter xmlWriter = new XmlTextWriter(stream,> System.Text.Encoding.UTF8);


    transform.Transform(xmlTextReader, xmlWriter);

    stream.Position = 0;

    XmlDocument XmlDoc = new XmlDocument();
    XmlDoc.Load(stream);

    return XmlDoc.OuterXml;
  }
Run Code Online (Sandbox Code Playgroud)

XSL转换就是这个..

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
            xmlns:msxsl="urn:schemas-microsoft-com:xslt"
            xmlns:nlbExtension="urn:nlbExtension"
            exclude-result-prefixes="msxsl nlbExtension">

<xsl:output method="xml" indent="yes"/>

<msxsl:script implements-prefix="nlbExtension" language="C#">    
<![CDATA[
  public string FormatDateTime(string xsdDateTime, string format)
  {
      DateTime date = DateTime.Parse(xsdDateTime);

      return date.ToString(format); 
   }
]]>
</msxsl:script>

<xsl:template match="/">
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
  http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" 
  xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"

  <xsl:for-each select="./Collection/Content" >
    <url>
      <loc>http://www.nlb.org<xsl:value-of select="./QuickLink/text()"/></loc>
      <lastmod><xsl:value-of select="./DateModified/text()" /></lastmod>
    </url>
  </xsl:for-each>      
</urlset>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 1

无法重现(事实上,您实际上并未在 xslt 中使用该扩展)。我测试了它,添加(到 xslt):

<xsl:value-of select="nlbExtension:FormatDateTime(.,'dd MMM yyyy')"/>
Run Code Online (Sandbox Code Playgroud)

并使用输入 xml:

string xml = new XElement("xml", DateTime.Now).ToString();
Run Code Online (Sandbox Code Playgroud)

它工作得很好(我更改为XmlConvert.ToDateTime匹配 xsd 格式,但无论哪种方式都工作正常)。

如果存在问题,则问题出在您未向我们展示的代码中。