1

我在 Empty.xslt 文件中有这个 xslt 样式表:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:nrki="http://www.essox.cz/xslt/nrki" xmlns:date="http://www.essox.cz/xslt/date" version="1.0" exclude-result-prefixes="msxsl" extension-element-prefixes="nrki date"> <xsl:import href="C:\Users\pparik.ESSOX\Desktop\Xslt\General.xslt" /> <xsl:import href="C:\Users\pparik.ESSOX\Desktop\Xslt\Nrki\General.xslt" /> <xsl:output method="text" indent="yes" /> <xsl:template match="@* | node()"> <xsl:if test="nrki:IsInLastDays('15042011', 6)"> je </xsl:if> </xsl:template> </xsl:stylesheet>

当我选择菜单项(在 Visual Studio 中)XML / Show XSLT 输出时,我得到了正确的结果。但是当我尝试使用代码(XslCompiledTransform)做同样的事情时,我得到编译错误异常。

string output = string.Empty;
XslCompiledTransform transform = new XslCompiledTransform(true);
XsltSettings sett = new XsltSettings(true, true);
transform.Load(new XmlTextReader(@"C:\Users\pparik.ESSOX\Documents\Essox\Zdrojové kódy\SES\Visual studio\SesSolution\TestXslt\Xslt sablony\Empty.xslt"), sett, null);
StringWriter sr = new StringWriter();
transform.Transform(this.EvaluationInput.CreateNavigator(), null, sr);
output = sr.ToString();

知道为什么吗?非常感谢,彼得

4

1 回答 1

1

XmlResolver请参阅对您传入的参数的评论null

如果为 null,则不解析外部资源。

然而C:\Users\pparik.ESSOX\Desktop\Xslt\General.xslt 外部资源。尝试传入 anew XmlUrlResolver()而不是null.

此外,您使用过度复杂的负载XmlTextReader- 这更容易:

transform.Load(path, sett, new XmlUrlResolver());

有关信息,您可以根据需要提供自己的自定义解析器 - 例如,我编写了一个将相对路径重新映射到 resx 内容的解析器,因此可以在 IDE 中正常编辑文件,然后作为嵌入式资源包含在内(但是仍然正确解决他们的兄弟姐妹)。

于 2011-04-21T15:04:03.677 回答