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

XSLT 2.0使用Tunnel通道参数传递变量未达预期如何解决

问题原因

你编写的XSLT 2.0代码语法本身没有错误,在支持XSLT 2.0的处理器(比如Saxon 9+)中运行可以得到预期结果。出现空节点的核心原因是你当前使用的XSLT处理器仅支持XSLT 1.0版本,而隧道参数(Tunnel Parameter)是XSLT 2.0新增的特性,XSLT 1.0环境无法识别和传递该参数,导致last_mod_dt_TS模板中拿到的slaStart为空值。

解决方案

方案1:切换到XSLT 2.0处理器

如果业务允许,将运行环境的XSLT处理器替换为支持2.0规范的版本,即可直接运行你现有代码得到预期输出。

方案2:兼容XSLT 1.0的实现

如果必须使用XSLT 1.0环境,可以通过定义key实现分组取值,不需要隧道参数,代码如下:

<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet 
  version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  exclude-result-prefixes="#all">
  <xsl:output indent="yes"/>
  <!-- 按request_Id对row节点分组 -->
  <xsl:key name="rowByReqId" match="row" use="request_Id"/>

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>  

  <xsl:template match="last_mod_dt_TS">
    <xsl:copy>
      <!-- 取当前行所属分组的第一个row的last_mod_dt_TS值 -->
      <xsl:value-of select="key('rowByReqId', ../request_Id)[1]/last_mod_dt_TS"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

这个版本的代码在XSLT 1.0环境中也可以正常运行,输出和你预期的结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:45:04