由xsl:function定义的函数可以替代xpath 3.0内联函数吗?
问题描述:
我用这个例子中播放中的XPath 3.0规范:由xsl:function定义的函数可以替代xpath 3.0内联函数吗?
fn:fold-left(function($a, $b) { $a + $b }, 0, 1 to 5)
我试图与通过XSL定义的函数来代替内联函数:函数。
<xsl:function name="ki:plus" as="xs:integer*">
<xsl:param name="a" as="xs:integer*">
<xsl:param name="b" as="xs:integer">
<xsl:value-of select="$a + $b">
</xsl:function>
但得到的错误是“倍左不能是空的序列。
的第一个参数难道我做错了什么,或者这是不可能的?在此先
感谢。
答
这里是一个正确的示例:
<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:my="my:my">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:sequence select=
"fold-left(my:add#2, 0, 1 to 5)
"/>
</xsl:template>
<xsl:function name="my:add" as="xs:integer">
<xsl:param name="arg1" as="xs:integer"/>
<xsl:param name="arg2" as="xs:integer"/>
<xsl:sequence select="$arg1 + $arg2"/>
</xsl:function>
</xsl:stylesheet>
当任何XML文档(未使用)应用,在想,正确的结果产生:
15
我必须承认,我几乎忘了这个问题。但是,知道这很高兴。谢谢。 –
@FredFinkle:不客气。我几天前偶然碰到了“xpath 3.0”标签。 –