如何输出节点中的所有文本,包括其子节点中的文本,同时排除“a”节点中的文本?
答案 0 :(得分: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>
有关内置模板规则如何工作的完整说明,请查看我网站上"How XSLT Works"的“内置模板规则”部分。
答案 1 :(得分:3)
如果您当前正在处理您的节点。
<xsl:value-of select="."/>
应该返回所有文字内容
答案 2 :(得分:1)
<xsl:for-each select="//*[text() and name() != 'a']">
<xsl:value-of select="."/>
</xsl:for-each>
答案 3 :(得分:1)
我相信这就是你要找的东西:
<xsl:for-each select="//text()[not(ancestor::a)]">
<xsl:value-of select="."/>
</xsl:for-each>
它选择不是锚标记子项的所有文本节点。