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

XSLT中apply-templates为何输出不匹配节点的多余文本内容?

问题根源

你遇到的多余文本输出是XSLT内置默认模板规则导致的:

  • 当你调用无select属性的<xsl:apply-templates/>时,会递归处理当前节点(根节点)下的所有子节点
  • 对于没有自定义匹配模板的节点,XSLT会触发默认规则:
    • 元素/根节点:自动递归处理所有子节点
    • 文本节点:直接输出节点内容

你没有为<Data>、<getGender>、<get_Gender>这些节点定义匹配模板,所以内置规则会递归到<get_Gender>下的文本节点,直接把male输出到结果中,再加上你后续主动写的<Feature name="gender">取的//get_Gender值,就出现了重复的male文本。


解决方案

选以下任意一种修改方式即可:

  1. 限定apply-templates的处理范围
    把根模板里的<xsl:apply-templates/>改为仅匹配你需要处理的Value节点:
<xsl:apply-templates select="//Value"/>

这样就只会处理你写了自定义模板的Value元素,不会触碰<Data>分支下的内容。

  1. 添加空模板屏蔽不需要的节点输出
    在样式表中添加规则,跳过不需要输出的节点内容:
<!-- 方式2-1:直接跳过Data节点的所有处理 -->
<xsl:template match="Data"/>

<!-- 方式2-2:屏蔽所有无匹配模板的文本节点输出,适合不需要额外默认文本输出的场景 -->
<xsl:template match="text()"/>

修改后即可得到你预期的输出结果。


内容的提问来源于stack exchange,提问作者GDF-WebDev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:06:04