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

XSLT技术需求:按元素子值删除节点并移除List元素

解决方案

需求1:删除指定的<Value>元素

通过XSLT的身份模板(默认复制所有节点)加上针对性的排除规则就能实现。先定义一个键(key)快速定位<List>中DisplayOrNo值为no的ElementID,提升匹配效率。

示例XSLT(仅完成需求1)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 定义键:匹配DisplayOrNo为no的Element的ID -->
    <xsl:key name="hidden-elements" match="List/Element[MetaData/Value[@AttributeID='DisplayOrNo']='no']" use="@ID"/>
    
    <!-- 身份模板:默认复制所有节点和属性 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    
    <!-- 排除Products中对应隐藏ElementID的Value元素 -->
    <xsl:template match="Products/Product/Values/Value[key('hidden-elements', @ElementID)]"/>
</xsl:stylesheet>

效果说明

该XSLT会保留原XML的所有内容,仅删除<Products>/<Product>/<Values>下ElementID匹配<List>中DisplayOrNo为no的<Value>元素,与你给出的预期结果完全一致。


需求2:同时移除整个<List>元素

完全可以在同一个XSLT里完成,不需要编写第二个。只需在上述基础上,新增一个模板跳过<List>元素的复制即可。

完整XSLT(同时满足两个需求)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 定义键:匹配DisplayOrNo为no的Element的ID -->
    <xsl:key name="hidden-elements" match="List/Element[MetaData/Value[@AttributeID='DisplayOrNo']='no']" use="@ID"/>
    
    <!-- 身份模板:默认复制所有节点和属性 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    
    <!-- 排除Products中对应隐藏ElementID的Value元素 -->
    <xsl:template match="Products/Product/Values/Value[key('hidden-elements', @ElementID)]"/>
    
    <!-- 移除整个<List>元素 -->
    <xsl:template match="List"/>
</xsl:stylesheet>

效果说明

这个XSLT会先执行需求1的删除操作,同时直接跳过<List>元素的复制,最终输出就是你想要的不含<List>且已清理指定<Value>的XML。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:35:11