2011-08-19 3 views
4

私は、XPath 3.0仕様で、この例で遊んでいた:機能:xsl:functionで定義された関数をxpath 3.0のインライン関数に置き換えることはできますか?

fn:fold-left(function($a, $b) { $a + $b }, 0, 1 to 5) 

Iは、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"タグにぶつかりました。 –

関連する問題