Xml XSLT:如何调用作为字符串给定的用户定义函数

Xml XSLT:如何调用作为字符串给定的用户定义函数,xml,xslt,xslt-1.0,Xml,Xslt,Xslt 1.0,我必须对下面的XML使用XSLT1.0。它有一个函数jr:itext,我用exslt用一个用户定义的函数替代了它。我可以剥离jr:itext()并显式调用该函数,如示例所示,但它看起来很难看,而且完整版本中还有其他函数 如何在XSLT`中调用(func字符串) <?xml version="1.0"?> <html xmlns="http://www.w3.org/2002/xforms" xmlns:jr="http://op

我必须对下面的XML使用XSLT1.0。它有一个函数
jr:itext
,我用
exslt
用一个用户定义的函数替代了它。我可以剥离
jr:itext()
并显式调用该函数,如示例所示,但它看起来很难看,而且完整版本中还有其他函数

如何在XSLT`中
调用(func字符串)

<?xml version="1.0"?>
<html xmlns="http://www.w3.org/2002/xforms" xmlns:jr="http://openrosa.org/javarosa">
  <label ref="jr:itext('calculate_test_output')"/>
</html>


请求输出
,
使用“从字符串调用函数?”
使用xsltproc(xsltproc是根据libxml 20910、libxslt 10134和libexslt 820编译的)我可以使用EXSLT
dyn:evaluate
函数动态调用XPath 1.0函数和
func:function
定义的函数:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:jr="http://openrosa.org/javarosa" xmlns:func="http://exslt.org/functions"
    extension-element-prefixes="func">

    <func:function name="jr:itext">
        <xsl:param name="ref"/>
        <func:result select="concat('itext ', $ref)"/>
    </func:function>

    <xsl:template match="label">
        <xsl:copy>
            <xsl:value-of select="dyn:evaluate(@ref)" xmlns:dyn="http://exslt.org/dynamic"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

当运行时(为了简化示例,我使用了无名称空间中的元素)


输出

<label>itext calculate_test_output</label>
<label>test 1</label>
itext计算测试输出
测试1

有,因此您可以尝试处理器是否支持
。但是,我不知道是否有任何支持EXSLT函数和EXSLT
dyn:evaluate
的处理器将使用
func:function
声明的函数公开到
dyn:evaluate
函数的XPath上下文中。在libxsl 1.1.32(在R库xslt中)中适用于我,在Saxon 9.1.0.5中失败。好的,因为我用的是R。
<html  xmlns:jr="http://openrosa.org/javarosa">
    <label ref="jr:itext('calculate_test_output')"/>
    <label ref="concat('test', ' 1')"/>
</html>
<label>itext calculate_test_output</label>
<label>test 1</label>