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

XSLT将父节点ID传递到子节点时多ID模板冲突如何解决?

XSLT多ID下推冲突调整方案
  • 限定模板匹配范围,禁止全局通用下推规则
    拆分不同ID的下推逻辑,给每个模板加上父节点限定,仅在指定父节点的子节点范围内执行对应ID的下推操作:
    • 针对AccountId下推:仅匹配Balance节点的子节点,模板规则写为match="Balance/*",逻辑仅包含复制父节点AccountId到子节点的操作
    • 针对交易ID(父节点Id字段)下推:仅匹配Movement节点的子节点,模板规则写为match="Movement/*",逻辑仅包含复制父节点Id到子节点的操作
  • 设置模板优先级避免匹配冲突
    如果需要保留部分通用下推规则,给针对性更强的父节点限定模板加上priority属性,数值更高的模板会优先执行,示例代码如下:
    <!-- Movement子节点下推交易ID 优先级设为10 -->
    <xsl:template match="Movement/*" priority="10">
      <xsl:copy>
        <!-- 重命名避免字段重名覆盖 -->
        <ParentTransactionId>
          <xsl:value-of select="../Id"/>
        </ParentTransactionId>
        <xsl:apply-templates select="@* | node()"/>
      </xsl:copy>
    </xsl:template>
    
    <!-- Balance子节点下推AccountId 优先级设为10 -->
    <xsl:template match="Balance/*" priority="10">
      <xsl:copy>
        <ParentAccountId>
          <xsl:value-of select="../AccountId"/>
        </ParentAccountId>
        <xsl:apply-templates select="@* | node()"/>
      </xsl:copy>
    </xsl:template>
    
    <!-- 通用复制模板 优先级设为1 作为兜底 -->
    <xsl:template match="@* | node()" priority="1">
      <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
      </xsl:copy>
    </xsl:template>
    
  • 下推ID时重命名字段
    不要直接使用Id、AccountId作为子节点的继承字段名,加上Parent前缀区分,彻底避免子节点原生同名字段被覆盖的问题。

以上调整完成后,Balance节点下的Investment仍会正常继承AccountId,Movement节点下的Link节点只会继承父节点的交易ID,不会被错误植入AccountId。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:09:04