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

使用XSLT移除子节点并保留父节点与子节点值的技术问询

解决方案:用XSLT移除嵌套子节点并保留父节点与文本值

我刚好处理过类似的需求,给你一个简洁的XSLT实现方案,完全能满足你的要求:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 身份模板:默认复制所有未被特殊处理的节点/属性,保证通用性 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 专门处理parent节点:保留标签,提取嵌套的value文本 -->
    <xsl:template match="parent">
        <parent>
            <!-- normalize-space自动去除文本前后的空白,让结果更干净 -->
            <xsl:value-of select="normalize-space(child/value/text())"/>
        </parent>
    </xsl:template>

    <!-- 直接移除child和value节点,不输出它们 -->
    <xsl:template match="child|value"/>
</xsl:stylesheet>

代码解释:

  • 身份模板:这是XSLT里的基础模板,默认会复制所有没有被特殊模板匹配到的节点和属性。如果你的XML还有其他需要保留的结构,这个模板能确保它们不受影响;如果只有示例里的简单结构,也可以去掉这个模板,但保留它会让代码更通用。
  • parent节点处理模板:我们重新输出<parent>标签,然后通过child/value/text()精准定位到需要的文本内容,normalize-space()函数会自动清除文本前后的空格(比如你示例里<value> 123 </value>的空格,处理后会变成干净的123)。
  • 移除child/value节点:匹配这两个节点但不做任何输出,相当于直接把它们从结果里剔除。

用这个XSLT处理你给出的输入XML,得到的输出就是:

<parent>123</parent>

如果你的实际XML结构更复杂(比如parent下有多个child/value节点),可以调整select的路径,比如用select="normalize-space(.//value/text())"来提取所有value节点的文本,根据你的实际需求修改即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:25:07