例子:
<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 文档上操作的事情复杂化。
其他来到这里的人可能会感兴趣: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)
| 归档时间: |
|
| 查看次数: |
202 次 |
| 最近记录: |