我需要編寫一個將一系列節點轉換爲一系列字符串的XSLT函數。我需要做的是將函數應用於序列中的所有節點,並返回與原始序列相同的序列。如何將函數應用於XSLT中的節點序列
這是輸入文件
<article id="4">
<author ref="#Guy1"/>
<author ref="#Guy2"/>
</article>
這是怎麼調用網站:
<xsl:template match="article">
<xsl:text>Author for </xsl:text>
<xsl:value-of select="@id"/>
<xsl:variable name="names" select="func:author-names(.)"/>
<xsl:value-of select="string-join($names, ' and ')"/>
<xsl:value-of select="count($names)"/>
</xsl:function>
這是函數的代碼:
<xsl:function name="func:authors-names">
<xsl:param name="article"/>
<!-- HELP: this is where I call `func:format-name` on
each `$article/author` element -->
</xsl:function>
我應該使用什麼裏面有func:author-names
?我嘗試使用xsl:for-each
,但結果是單個節點,而不是一個序列。
請爲期望的輸出添加一個示例。 – 2013-04-27 10:41:36
令人困惑的是,在想要「將函數應用於節點序列」的問題的標題中,但是在您的代碼中,您正在使用爲單個節點的參數值調用該函數。另外令人困惑的事實是,你沒有指定參數的類型和函數的返回類型。這使得這個問題很難理解。我總是建議任何開始使用XSLT的人總是指定類型:變量,函數參數,模板參數和全局參數,以及模板輸出的類型。 – 2013-04-27 16:00:27