<xsl:apply-templates>和<xsl:apply-templates select =“。”> </xsl:apply-templates> </xsl:apply-templates>之间有什么区别?

时间:2010-10-18 21:35:17

标签: xml xslt xpath

<xsl:apply-templates /><xsl:apply-templates select="." />之间有什么区别?我认为select="."没有必要,但根据我的使用情况,我会得到不同的结果。

很抱歉,如果这是重复。我试过搜索这个问题但找不到任何东西。

2 个答案:

答案 0 :(得分:18)

  

有什么区别   <xsl:apply-templates />和   <xsl:apply-templates select="." />

第一条指示

<xsl:apply-templates />

的缩写:

<xsl:apply-templates select="child::node()" />

第二条指令

<xsl:apply-templates select="." />

是:

的简写
<xsl:apply-templates select="self::node()" />

正如我们所见,不仅这两个指令不同(前者将模板应用于所有子节点,后者将模板应用于当前节点),但后者是危险的< / strong>并且经常会导致无休止的循环!

答案 1 :(得分:4)

您是否正在考虑

之间的区别
<xsl:apply-templates />

<xsl:apply-templates select="*" />

?我问的原因是<xsl:apply-templates select="." />非常罕见,而<xsl:apply-templates select="*" />非常常见。

在这两种选择中进行选择时,select="*"通常是不必要的,但存在差异:

  • Dimitre指出, <xsl:apply-templates />没有 选择将处理所有子项 节点。这包括评论, 处理说明,大多数 值得注意的是,文本节点,以及 儿童元素。
  • 相比之下,<xsl:apply-templates select="*" />只会选择孩子 元素节点。

因此,如果输入XML可以包含除元素之外的子节点,并且您不想处理这些节点,那么<xsl:apply-templates select="*" />就是您想要的。