找到答案后修改了题目:) :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">
<xsl:variable name="date1" select="//date1"/>
<xsl:variable name="date2" select="//date2"/>
<msxsl:script language="C#" implements-prefix="cs">
<![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));
}
]]>
</msxsl:script><br>
<xsl:template match="datediff"><br>
<xsl:element name="{local-name()}"><br>
<xsl:value-of select="cs:datediff($date1, $date2)" /><br>
</xsl:element><br>
</xsl:template><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/