【问题标题】:XSLT 1.0 How to extend with fn (function namespace)XSLT 1.0 如何用 fn 扩展(函数命名空间)
【发布时间】:2011-01-19 15:33:27
【问题描述】:

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

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

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

非常感谢任何帮助!

非常感谢!

【问题讨论】:

  • 像 MSXML 这样的 XSLT 1.0 处理器支持 XPath 1.0 w3.org/TR/xpath/#corelib 和 XSLT 1.0 w3.org/TR/xslt#add-func 中定义的函数。如果您将其与 w3schools 发布的内容进行比较,您会发现 XPath 1.0 中可用的功能是 XPath 2.0 中定义的功能的子集。因此,您可以将 w3schools 上的一些功能与 MSXML 一起使用,但当然只能使用那些已经在 XPath 1.0 中定义的功能,而不是那些在 XPath 2.0 中新定义的功能。基本上,如果您想使用 XSLT 1.0 处理器,那么使用 w3schools 作为参考并不是一个好主意。

标签: xslt function extend xslt-1.0


【解决方案1】:

如果您坚持使用 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 函数。

【讨论】:

  • @Tim C 非常感谢。我注意到您声明了 msxsl 命名空间 (xmlns:msxsl="urn:schemas-microsoft-com:xslt")。我想知道您是否知道一个阅读 MSXML 的好地方,这样我就可以理解它并弄清楚我可以使用什么......我真的很感激!谢谢!
  • 我不知道它有多好,但你可以试试 MSDN 上的这个链接 - msdn.microsoft.com/en-us/library/ms759204(VS.85).aspx
【解决方案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 是可行的。

【讨论】:

  • @Obalix 谢谢。不幸的是,他们不会改变处理器。我只是想知道我是否可以做任何事情以便我可以使用w3schools.com/Xpath/xpath_functions.asp 中的函数?以某种方式扩展 MSXML?标志。我想我在一个大泡菜中。
  • 好吧,您可以查看exslt.org 以查看是否有可以使用的东西,但是,除非 MS 决定将 XSLT 2.0 合并到处理器中,否则您将独自一人。但是,不要灰心,我刚才也落入了同样的陷阱。
猜你喜欢
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多