Может ли функция, определенная xsl:function, заменить встроенную функцию xpath 3.0?
Я играл с этим примером в спецификации xpath 3.0:
fn:fold-left(function($a, $b) { $a + $b }, 0, 1 to 5)
Я попытался заменить встроенную функцию функцией, определенной xsl:function.
<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>
Но получил ошибку, что "первый параметр fold-left не может быть пустой последовательностью.
Я что-то не так делаю или это невозможно?
Заранее спасибо.
1 ответ
Решение
Вот правильный пример:
<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