Xml XSLT:如何调用作为字符串给定的用户定义函数
我必须对下面的XML使用XSLT1.0。它有一个函数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
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编译的)我可以使用EXSLTdyn: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函数和EXSLTdyn: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>