2011-08-19 47 views
4

我用這個例子中播放中的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> 

但得到的錯誤是「倍左不能是空的序列。

的第一個參數難道我做錯了什麼,或者這是不可能的?在此先

感謝。

回答

4

這裏是一個正確的示例

<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 
+0

我必須承認,我幾乎忘了這個問題。但是,知道這很高興。謝謝。 –

+0

@FredFinkle:不客氣。我幾天前偶然碰到了「xpath 3.0」標籤。 –

相關問題