目的:
<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()">
这种符号还有其他变体。在@Michael Kay 的早期书籍中,还可以找到如下表达:
@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="/.."/>
并再次运行转换。
这次执行转换时没有运行时错误。
结论:指定空节点集的能力在实践中很重要,表达式/..
是实现这一点的一种方式。