为何空XSLT样式表会返回XML中的文本内容?
为什么空XSLT样式表会返回文本内容?
当你使用空样式表(或样式表中的模板无法匹配任何节点)时,XSLT处理器会自动启用内置的默认模板规则,这就是输出文本内容的核心原因。
默认模板的两类核心规则:
元素/根节点的默认模板
这个模板会递归处理当前节点的所有子节点,相当于“穿透”元素结构,继续向下遍历:<xsl:template match="*|/"> <xsl:apply-templates/> </xsl:template>比如你的测试XML里的
<TEST>、<ABC>、<a>等元素,因为没有匹配的自定义模板,处理器会触发这个规则,继续处理它们的子节点。文本节点的默认模板
这个模板会直接输出文本节点的内容:<xsl:template match="text()"> <xsl:value-of select="."/> </xsl:template>当处理器递归到
<a>、<b>、<c>内部的文本节点时,就会触发这个规则,把文本内容直接输出。
结合你的示例的执行流程:
- 根节点触发元素默认模板,处理
<TEST>子节点; <TEST>触发元素默认模板,处理<ABC>子节点;<ABC>触发元素默认模板,处理<a>、<b>、<c>子节点;- 每个
<a>/<b>/<c>触发元素默认模板,处理内部的文本节点; - 文本节点触发文本默认模板,输出内容,最终得到所有文本的拼接结果。
如果样式表中存在模板但match值无法匹配任何节点,处理器同样会回退到默认模板规则,产生和空样式表一致的输出。
内容的提问来源于stack exchange,提问作者Andrey Davydenko
相关产品推荐
相关产品推荐

