XslCompiledTransform 编译错误

发布于 2024-11-03 00:48:36 字数 1392 浏览 1 评论 0原文

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

/>/>

当我选择菜单项(在 Visual Studio 中)XML / Show XSLT Output 时,我得到了正确的结果。 但是当我尝试使用代码(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();

知道为什么吗?多谢, 彼得

I have this xslt stylesheet, in file Empty.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>

When I select menu item (in Visual studio) XML / Show XSLT Output, I get correct results.
But when I try to do the same using code (XslCompiledTransform), I get compilation error exception.

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();

Any idea why? Thanks a lot,
Petr

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

奢华的一滴泪 2024-11-10 00:48:36

请参阅对传入 nullXmlResolver 参数的注释:

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

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

另外,您使用 XmlTextReader 使加载过于复杂 - 这更容易:

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

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

See the comment on the XmlResolver argument where you are passing in null:

If this is null, external resources are not resolved.

Yet C:\Users\pparik.ESSOX\Desktop\Xslt\General.xslt is an external resource. Try passing in a new XmlUrlResolver() instead of null.

Also, you are over-complicating the load by using XmlTextReader - this is easier:

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

For info, you can supply your own custom resolvers if you like - for example, I wrote one that re-mapped relative paths to contents from a resx, so the files could be edited normally in the IDE but then included as embedded resources (but still resolve their siblings correctly).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文