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

XSLT通用方案:按TYPE属性值重命名XML元素标签

通用XSLT转换实现方案

不需要为每个TYPE取值单独编写匹配模板,XSLT支持动态创建元素,仅需一个通用匹配规则即可覆盖所有转换场景,完整可直接运行的代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" omit-xml-declaration="yes" />

    <!-- 身份复制模板:原样复制所有不需要特殊处理的节点和属性 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template> 

    <!-- 通用模板:匹配所有带TYPE属性的元素,无需枚举任何TYPE取值 -->
    <xsl:template match="*[@TYPE]">
        <!-- 动态生成新标签,标签名直接取TYPE属性的取值 -->
        <xsl:element name="{@TYPE}">
            <!-- 先复制原元素除TYPE、DESC外的所有原有属性 -->
            <xsl:apply-templates select="@*[name()!='TYPE' and name()!='DESC']" />
            <!-- 按规则设置DESC属性,值为原始标签名 -->
            <xsl:attribute name="DESC">
                <xsl:value-of select="name()"/>
            </xsl:attribute>
            <!-- 递归处理所有子节点 -->
            <xsl:apply-templates select="node()" />
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>

逻辑说明

  • 该实现完全兼容XSLT 1.0标准,所有主流XSLT解析器都可以直接运行
  • 自动匹配所有携带TYPE属性的元素,无论TYPE属性的取值是什么,都能按照规则完成标签重命名和DESC属性设置,不需要提前枚举可能的TYPE值
  • 元素原有除TYPE外的属性、子节点结构都会完整保留,转换结果和给出的预期输出完全一致
  • 不带TYPE属性的节点(比如示例中存放在NODE下的ENTITY/REQUEST条目、FLAG标签)会走默认的身份复制逻辑,不会被改动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:03:20