c# - 如何在 C# 中启用 XSLT 脚本 ..?

标签 c# xslt

找到答案后修改了题目:) :P

我正在通过 C# 程序加载一个 XML 文件和一个 XSL 文件并触发 XSL 转换..这是它的代码:

static void Main(string[] args)
{

    // Create the XslCompiledTransform and load the stylesheet.
    XslCompiledTransform xslt = new XslCompiledTransform();
    xslt.Load("input.xsl");    //located in Debug folder
    //Load XSL argument list
    XsltArgumentList xslArg = new XsltArgumentList();

    // Transform the file.
    using (XmlWriter w = XmlWriter.Create("output.xml"))
    {
        xslt.Transform("input.xml", xslArg, w);    //located in Debug folder
    }
}

错误是我无法加载 XML 文件。

XSL 文件包含一些 C# 代码,用于计算两个 DateTime 字符串之间的差异..好吧,我可以使用相同的 XSL 文件手动转换 XML 文件..但是当我尝试使用 C# 代码触发转换..然后它说“它无法加载 XML 文件”

这是我的(部分)XSL 代码..

<span bgcolor="#EEEEEE">

   &lt;xsl:variable name="date1" select="//date1"/&gt;
   &lt;xsl:variable name="date2" select="//date2"/&gt;

   &lt;msxsl:script language="C#" implements-prefix="cs"&gt;
   &lt;![CDATA[
         public string datediff(string date1, string date2) {

            DateTime startTime = new DateTime(Convert.ToInt32(date1.Substring(6, 4)), Convert.ToInt32(date1.Substring(0, 2)), Convert.ToInt32(date1.Substring(3, 2)), Convert.ToInt32(date1.Substring(11, 2)), Convert.ToInt32(date1.Substring(14, 2)), Convert.ToInt32(date1.Substring(17, 2)), 0);

            DateTime endTime = new DateTime(Convert.ToInt32(date2.Substring(6, 4)), Convert.ToInt32(date2.Substring(0, 2)), Convert.ToInt32(date2.Substring(3, 2)), Convert.ToInt32(date2.Substring(11, 2)), Convert.ToInt32(date2.Substring(14, 2)), Convert.ToInt32(date2.Substring(17, 2)), 0);

    return(endTime.Subtract(startTime));

         }
     ]]>
   &lt;/msxsl:script&gt;<br>
   &lt;xsl:template match="datediff"&gt;<br>
    &lt;xsl:element name="{local-name()}"&gt;<br>
      &lt;xsl:value-of select="cs:datediff($date1, $date2)" /&gt;<br>
    &lt;/xsl:element&gt;<br>
   &lt;/xsl:template&gt;<br></span>

是因为脚本(计算日期差异的 C# 代码..)我收到此错误吗?
顺便说一句,当我使用其他一些输入 XML 和 XSL 文件时,C# 代码运行完美..

请帮助我克服这个错误..

最佳答案

作为Steve cooper已经提到..您需要启用 XSLT脚本..和here is the way to do it :

首先定义一个新的settings实例:

var settings = new XsltSettings();

然后启用脚本

settings.EnableScript = true;

创建 XslCompiledTransform 对象并加载样式表,传入 settings 对象。

关于c# - 如何在 C# 中启用 XSLT 脚本 ..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1872568/

相关文章:

C#生产者/消费者

c# - 按顺序获取第一个缺失元素的有效方法?

c# - 发布 Web 应用程序时 AfterPublish 脚本不运行

xml - 使用 XSLT 对 XML 中相似节点的内容进行分组

java - 使用 XSL FO 文件使用 iText 布局 PDF

c# - 查找String中最长的重复字符

c# - Foreach 遍历给定月份的年份的方法?

xml - 可以更好地控制 xsl/xpath 中的 for-each 吗?

xml - 创建后在 xsl 中对表进行排序

xml - XSL 如何在不使用属性的情况下根据值计算节点数?