2017-05-03 12 views

回答

2

始終使用xsl:sequence

xsl:sequence返回其選擇表達式的結果。

xsl:value-of將選擇表達式的結果包裝到文本節點中。如果函數的聲明結果是(比如說)xs:integer,則文本節點將被原子化並轉換爲xs:integer。因此,例如

<xsl:function name="f:add" as="xs:integer"> 
    <xsl:param name="x" as="xs:integer"/> 
    <xsl:param name="y" as="xs:integer"/> 
    <xsl:value-of select="$x + $y"/> 
</xsl:function> 

將執行整數加法x和y,將結果轉換爲字符串,在一個文本節點把這個包,霧化文本節點,以獲得非類型化原子值,然後轉換無類型的原子值爲一個整數。

如果幸運的話,優化器會檢測到這是浪費精力和避免開銷,但最好不要依賴它。

還有其他一些情況,其中xsl:value-of根本不起作用,例如函數正在返回一個節點。

+0

謝謝Michael! – Rupesh