1

我正在尝试修改现有项目以添加一些功能。我想将一些参数传递给我的 xsl 样式表,但是任何参数的使用都会导致错误。我尝试插入教程等中最简单的示例,但无济于事。我相信问题可能与正在使用的 xslt 版本有关?

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" language="VBScript">
  <xsl:param name="test">TEST</xsl:param>

<xsl:template match="/">
  <xsl:value-of select="$test"></xsl:value-of>  
</xsl:template>

</xsl:stylesheet>

为了使示例尽可能简单,我删除了所有其他代码。根据我的理解,这段代码应该只是在html页面上输出TEST。但是,我得到的是一个经典的 IIS 错误:

An error occurred on the server when processing the URL. Please contact the system administrator.

If you are the system administrator please click here to find out more about this error.

有没有人知道为什么会这样?当我尝试以任何方式使用变量时,也会出现同样的问题。是我的 Web 服务器有问题,还是使用的 xslt 版本有问题?

感谢您的帮助!

4

2 回答 2

1

可能值得花一些时间看看是否有更好的错误消息潜伏在某处的日志文件中。我不了解 IIS,但 Microsoft 技术似乎习惯于生成大量诊断信息,然后不告诉您它们在哪里。

但是 xsl:stylesheet 元素上的属性language="VBScript"是一个错误,任何符合 XSLT 的处理器,无论是 1.0 还是 2.0,都应该因为这个原因拒绝这个样式表。

哎呀:我刚刚注意到你使用了xmlns:xsl="http://www.w3.org/TR/WD-xsl". 这意味着您根本没有使用 XSLT,而是他们在 1998 年引入的 Microsoft 专有的“工作草案 XSL”语言,大约一年后就过时了。我相信这种与 XSLT 有一些家族相似之处的语言仍然有效,但现在几乎不可能获得关于它的文档,除非通过搜索二手书店。

于 2012-11-30T09:21:03.380 回答
0

扩展 Michael Kay 的回答,微软可能会放弃对旧的“http://www.w3.org/TR/WD-xsl”命名空间的支持,因此不能保证它可以工作更长时间。正如 MSDN 上所解释的,这肯定是 IE9 的情况

http://msdn.microsoft.com/en-gb/library/ie/hh180178(v=vs.85).aspx

我最近不得不更改使用“http://www.w3.org/TR/WD-xsl”的 XSLT 样式表以使其在 IE9 中工作。将其更改为使用“http://www.w3.org/1999/XSL/Transform”的正确命名空间可能只是一个简单的案例,但如果您使用的构造不是在当前命名空间中实际支持。这些是我注意到在旧版中支持的东西,但在当前版本中不支持

  • xsl:apply-templates有一个order-by属性。将其替换为 xsl:sort
  • xsl:if允许匹配属性。将此替换为测试
  • 支持xsl:eval。这可能需要一些返工来替换,具体取决于它的用途。
于 2012-11-30T10:04:16.620 回答