XSL:选择节点中的所有文本,但某种类型的节点除外

joe*_*joe 1 xslt

如何输出节点中的所有文本,包括其子节点中的文本,同时排除"a"节点中的文本?

Eva*_*enz 8

使用文本节点的内置模板规则,即将它们复制到结果中.即使对于您指定的新处理模式(下面的代码中的"all-but-a"),内置规则也适用:对于元素,(递归地)处理子代; 对于文本节点,复制.您只需要覆盖其中一个<a>元素规则,即空模板规则,它可以有效地删除文本.

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="myNode">
    <!-- Process children -->
    <xsl:apply-templates mode="all-but-a"/>
  </xsl:template>

          <!-- Don't process <a> elements -->
          <xsl:template mode="all-but-a" match="a"/>

</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

有关内置模板规则如何工作的完整说明,请查看我网站上"XSLT如何工作"的"内置模板规则"部分.