XSLT 1.0如何用fn扩展(函数命名空间)

时间:2010-02-22 13:34:08

标签: xslt function extend xslt-1.0

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

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

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

非常感谢任何帮助!

非常感谢!

2 个答案:

答案 0 :(得分: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函数。

答案 1 :(得分:2)

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

  1. 试着说服你们,他们应该为Saxon.NET这样的另一个XSLT处理器提供支持。
  2. 使用microsoft的msxsl:script函数重新实现所需的所有功能。这应该是困难的,并使您依赖Microsoft解析器。此外,它只讨论XPath函数 - 这里不考虑XSLT 2.0功能。
  3. 使用XSLT 1.0重新实现样式表。
  4. 就个人而言,我猜选项1和3是可行的。