在 XSLT 中,是否可以有一个指向函数的指针?

dav*_*ave 3 xml xslt

例子:

<xsl:function name="my:function" as="xs:integer">
    <xsl:param name="pNum" as="xs:integer" />
    <xsl:sequence select="$pNum * 2" />
</xsl:function>

<xsl:sequence select="my:function(1)" />
Run Code Online (Sandbox Code Playgroud)

my:function如果可能的话,我希望能够调用,持有对该函数的一些引用。

下面的代码工作,但intented展现我所试图做的:

<xsl:variable name="vFn" select="my:function" />
<xsl:sequence select="$vFn(5)" />
Run Code Online (Sandbox Code Playgroud)

我正在对 Mardown 格式的纯文本文件运行转换,以将其转换为 html。我不确定它是否会使我不在 xml 文档上操作的事情复杂化。

Mic*_*Kay 5

其他来到这里的人可能会感兴趣:Dimitre Novatchev 设计了一种在 XSLT 2.0 中工作的方法(或者如果您用节点集扩展替换函数的命名模板,即使在 1.0 中)。(他还创建了一个名为 FXSL 的库来利用该技术)。

创建一个包含以函数命名的元素的变量:

<xsl:variable name="my:function" as="element()">
  <my:function/>
</xsl:variable>
Run Code Online (Sandbox Code Playgroud)

然后创建一个匹配这个元素的模板规则并调用函数:

<xsl:template mode="dyn" match="my:function">
  <xsl:param name="p1"/>
  <xsl:sequence select="my:function($p1)"/>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

现在定义一个函数来进行动态调用:

<xsl:function name="dyn:call">
  <xsl:param name="function"/>
  <xsl:param name="param"/>
  <xsl:apply-templates select="$function" mode="dyn">
    <xsl:with-param name="p1" select="$param"/>
  </xsl:apply-templates>
</xsl:function>
Run Code Online (Sandbox Code Playgroud)

现在您可以使用该变量$my:function作为函数的代理,将其调用为

 ... select="dyn:call($my:function, 2)"/>
Run Code Online (Sandbox Code Playgroud)