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

能否仅重命名XML特定层级的同名标签?附XSLT尝试代码

问题解答

你的当前XSLT无法完全实现需求,原因有两点:

  • 匹配规则//Modifications/Modifications仅会选中所有作为直接子节点的Modifications(在你的三层示例里仅覆盖第二层级元素),无法命中倒数第二层级的目标节点;
  • 你创建的新元素名存在笔误,应该是Modifications_1(少了末尾的s)。

正确实现方案

以下XSLT可同时重命名第二层级和倒数第二层级的<Modifications>为<Modifications_1>:

<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>

  <!-- 匹配目标层级的Modifications元素 -->
  <xsl:template match="/Modifications/Modifications | Modifications[Modifications[not(Modifications)]]">
    <xsl:element name="Modifications_1">
      <xsl:apply-templates select="@*|node()"/>
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>

匹配规则说明

  • /Modifications/Modifications:精准匹配根节点下的直接子<Modifications>(即第二层级元素);
  • Modifications[Modifications[not(Modifications)]]:匹配所有满足「自身是<Modifications>,且它的子<Modifications>没有任何子节点」的元素——也就是倒数第二层级的节点(因为它的子节点是最内层的<Modifications>)。

测试效果

针对你提供的三层示例XML,转换后结果为:

<Modifications>
  <Modifications_1>
     <Modifications>
     </Modifications>
  </Modifications_1>
</Modifications>

如果是四层嵌套的XML结构:

<Modifications>
  <Modifications>
     <Modifications>
        <Modifications>
        </Modifications>
     </Modifications>
  </Modifications>
</Modifications>

转换后会得到:

<Modifications>
  <Modifications_1>
     <Modifications_1>
        <Modifications>
        </Modifications>
     </Modifications_1>
  </Modifications_1>
</Modifications>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:56:00