xml - 检查模板 P 中节点的名称是否为 Fox

标签 xml xslt

在模板名称 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/

相关文章:

c# - 如何在 xsd 中使用枚举

asp.net - Web.config转换作为第一个子项插入

xml - 使用 XSLT 检查 XML 节点名称是否包含字母

xslt - XSLT横向

xml - XPath name()函数是否用于当前元素?

xml - AJAX/Jquery XML 解析

node.js - 如何使用 Node xml2js 模块转义字符?

arrays - 如何在 swift 中从 xml 文件获取数组

Java SAX解析: What's wrong with this XML?

xml - 使用 XSLT 从另一个 xml 文件获取 XML 节点描述