在模板名称 P 中,我想检查当前节点的名称是否为 Fox。我想知道人们进行此类检查的通常方式是什么:
<xsl:template name="P">
<xsl:if test="self::Fox">
</xsl:if>
</xsl:template>
或者:
<xsl:template name="P">
<xsl:if test="name(.)='Fox'">
</xsl:if>
</xsl:template>
或者:与此 2 相比,还有其他更好的解决方案吗?
最佳答案
我想你会发现很多人使用[name()='Fox']
,但推荐的方法,也是专家使用的方法,是使用self::Fox
。其主要原因是,当周围存在命名空间时,name() 是不可靠的,而测试namespace-uri() 和local-name() 的替代方案既麻烦又冗长。此外,许多 XPath 引擎都有搜索具有给定名称的元素的方法,而无需对每个元素进行字符串比较。由于 name()=Fox
的计算需要查看命名空间前缀,而不是 URI,这是一种不常见的操作,因此效率也可能较低。
关于xml - 检查模板 P 中节点的名称是否为 Fox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6463497/