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

XSL匹配属性值后为对应元素添加同级兄弟节点的实现问题

问题原因

你当前的写法错误根源在于匹配对象是属性节点。XSLT处理属性节点时,在属性模板内新增的元素会被自动归入属性所属的<COL>元素内部,所以最终会变成子节点而非同级节点。

解决方法

将匹配规则调整为匹配包含目标属性值的<COL>元素本身,先完整复制原有<COL>元素,再追加新增节点即可,修正后的完整XSLT代码如下:

<xsl:stylesheet version="2.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes" media-type="text/xml" method="xml" />

  <xsl:param name="rtdTag" />
  <xsl:param name="rtdDupTag" />

  <!-- 默认复制所有节点 -->
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <!-- 匹配包含目标属性值的COL元素 -->
  <xsl:template match="COL[@* = $rtdTag]">
    <!-- 先完整复制原COL元素 -->
    <xsl:copy-of select="."/>
    <!-- 再追加同级的新COL节点 -->
    <COL NAME="DuplicateTag" VAL="{$rtdDupTag}"/>
  </xsl:template>
</xsl:stylesheet>

效果说明

调整后匹配的是<COL>元素本身,在模板内先后输出原<COL>和新<COL>,两个节点自然为同级关系,完全符合预期的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:24:06