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

XSL如何获取元素本身文本值 忽略嵌套子节点内容

XSL获取元素自身文本(排除嵌套子节点文本)解决方案

问题原因

你当前使用xsl:value-of select="$elem"的写法,默认会提取$elem节点下所有子孙节点的文本内容并拼接,所以会把子元素<b>的child value也包含到输出结果中。

可行实现方案

核心思路是通过XPath的text()节点测试,仅选中目标元素的直接子文本节点,不会递归进入嵌套子元素提取文本。

方案1:基础实现(适配单个直接文本节点场景)

如果目标元素下直接文本是连续的一段,直接修改foo模板的取值逻辑即可,搭配normalize-space()可自动去除文本前后的多余换行、空格:

<xsl:template name="foo">
    <xsl:param name="elem" />
    <i>Val: <xsl:value-of select="normalize-space($elem/text())"/></i>
</xsl:template>

输出结果:Val: parent value,完全符合预期。

方案2:兼容多段直接文本场景

如果目标元素下存在多段分散的直接文本(比如中间穿插了多个子元素),可以遍历所有直接文本节点拼接,适配XSLT 1.0及以上版本:

<xsl:template name="foo">
    <xsl:param name="elem" />
    <i>Val: 
        <xsl:for-each select="$elem/text()">
            <xsl:value-of select="normalize-space(.)"/>
        </xsl:for-each>
    </i>
</xsl:template>

方案3:XSLT 2.0+ 简化写法

如果使用XSLT 2.0及更高版本,可以用string-join直接拼接所有直接文本节点,写法更简洁:

<xsl:template name="foo">
    <xsl:param name="elem" />
    <i>Val: <xsl:value-of select="string-join($elem/text()!normalize-space(), '')"/></i>
</xsl:template>

内容的提问来源于stack exchange,提问作者Simon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:57:02