的目的:
<xsl:param name="pFun" select="/.."/>
是指定(至少在XPath 1.0中,其類型系統是非常弱),該參數$pFun
的類型是一個節點(或更一般地,節點 - 組)。因此,讀者知道爲該參數傳遞的值不應該是字符串或整數。
它還指定默認值(如果在調用或應用模板時沒有明確指定此參數)是空節點集。
此表示法主要具有文檔意義(但請參閱此答案末尾的更新),僅適用於類型系統較弱的XPath 1.0。在XPath 2.0中,建議明確指定類型,以便XPath處理器可以執行更好的類型檢查,並且生成的代碼可以更優化和高效。
所以,在XPath中2.0/XSLT 2.0(在該特定情況下)會更好重構以上到:
<xsl:param name="pFun" as="element()">
有這樣的符號其它變型。在@邁克爾凱的早期著作之一也可以找到類似的表達式:
@comment()
更新:表達/..
比僅僅服務於文檔的目的更實際的用途。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:param name="pNode"/>
<xsl:copy-of select=".|$pNode"/>
</xsl:template>
</xsl:stylesheet>
嘗試將此轉換應用於任何XML文檔。在我們的情況下,最簡單的可能:
<t/>
結果以下撒克遜錯誤消息(類似的錯誤與其他XSLT 1.0處理器):
Error at xsl:copy-of on line 8 of file:/(Untitled):
The value is not a node-set
Transformation failed: Run-time errors were reported
立即更換:
<xsl:param name="pNode"/>
與:
<xsl:param name="pNode" select="/.."/>
並再次運行轉換。
這次轉換沒有運行時錯誤。
結論:指定空節點集的能力在實踐中很重要,表達式/..
是實現這一點的一種方式。