2

我想知道如何扩展 XSLT 1.0 以便可以使用来自http://www.w3schools.com/Xpath/xpath_functions.asp的 fn 函数命名空间中的函数

我刚刚被告知系统从现在开始使用 MSXML XSLT 处理器。我所有的样式表都是用 2.0 编写的……所以现在我是堆栈,没有任何工作,不知道如何使用例如来自 fn 命名空间的函数。

我想知道是否有可能以某种方式扩展 XSLT 1.0,因为我使用了很多这些功能。或者我现在该怎么办?我完全迷失和沮丧。

非常感谢任何帮助!

非常感谢!

4

2 回答 2

3

如果您坚持使用 MSXML 作为您的处理器,我认为您唯一的办法就是使用 Obalix 答案中的选项 2,但您可能必须自己编写扩展函数。

这是一个如何执行大写函数的示例。这使用 XSLT 中的 javascript 来执行该功能。

<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:msxsl="urn:schemas-microsoft-com:xslt"
      xmlns:user="http://mycompany.com/mynamespace">

<msxsl:script language="javascript" implements-prefix="user">
   function uppercase(textToConvert) 
   {
      return textToConvert.toUpperCase();
   }
</msxsl:script>

<xsl:template match="text()">
   <xsl:value-of select="user:uppercase(string(.))"/>
</xsl:template>

</xsl:stylesheet>

您可以做的是将所有脚本函数放在它们自己的 XSLT 表中,并将其包含在您自己的所有 XSLT 样式表中。

这究竟有多复杂,取决于您使用了多少 XPath2.0 函数。

于 2010-02-22T14:17:47.837 回答
2

好吧,恕我直言,你有点卡住了。MSXML,不实现 XSLT 2.0 和 XPath 2.0。所以基本上你有三个选择:

  1. 尝试说服您的上级,他们应该为像 Saxon.NET 这样的另一个 XSLT 处理器提供支持。
  2. 使用微软的 msxsl:script 函数重新实现您需要的所有函数。这应该会很困难,并且会让您依赖 Microsoft 解析器。此外,它只转换 XPath 函数——这里不考虑 XSLT 2.0 功能。
  3. 使用 XSLT 1.0 重新实现样式表。

就个人而言,我想只有选项 1 和 3 是可行的。

于 2010-02-22T13:43:13.170 回答