You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无select属性的<xsl:apply-templates />会调用哪个模板?

关于无select属性的<xsl:apply-templates />匹配逻辑解析

嘿,这个问题绝对是XSLT初学者的常见困惑点,我来给你讲得明明白白~

首先得明确无select属性的<xsl:apply-templates />的核心规则:
它完全等价于写 <xsl:apply-templates select="node()" />,意思是会处理当前上下文节点的所有直接子节点——这里的子节点包含元素节点、文本节点、注释节点、处理指令,只要是当前节点的直接子元素/内容都会被遍历并匹配对应模板。

结合你的示例代码具体分析

你的示例里有这样一段模板:

<xsl:template match="col_1">
  <xsl:apply-templates />
</xsl:template>

当这个模板被触发执行时,当前的上下文节点就是一个col_1元素节点。此时,<xsl:apply-templates />会遍历这个col_1节点的每一个直接子节点,然后为每个子节点找到优先级最高的匹配模板来执行。

举个更具象的例子,假设你的XML输入是这样的:

<content>
  <set_0>
    <col_0>Test content</col_0>
  </set_0>
  <col_1>
    <sub_col>Inner text</sub_col>
    This is a text node inside col_1
  </col_1>
</content>

那处理col_1节点时,<xsl:apply-templates />会处理两个子节点:

  • 第一个是<sub_col>元素节点:如果你的XSLT里有match="sub_col"的自定义模板,就会调用该模板;如果没有自定义模板,就会触发XSLT的内置默认模板——默认模板会对元素节点再次递归调用<xsl:apply-templates />,最终输出元素内的文本内容。
  • 第二个是文本节点This is a text node inside col_1:XSLT的默认模板会直接输出这段文本内容。

和带select属性的写法对比

你提到的<xsl:apply-templates select="set_0/col_0" />是精准指定要处理的节点路径,只处理当前上下文节点下的set_0/col_0节点;而无select的写法是遍历当前节点的所有子节点,逐个匹配执行对应模板,范围更广、逻辑是“扫一遍当前节点的所有子内容”。

内容的提问来源于stack exchange,提问作者DVN-Anakin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:52:50