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

如何在我的XML转换场景中让XSLT的key函数正常工作

问题根源

  1. 上下文路径错误:匹配Results/Result的模板内部,上下文节点是<Result>,直接写Results会从当前<Result>的子节点查找对应节点,无法匹配到文档中顶级的Results节点。
  2. 筛选逻辑未限定当前ID:你原有for-each的筛选条件仅判断Results的RefId是否存在对应的Result,两个测试用的RefId都满足条件,所以每次模板执行都会返回两个Results节点,导致输出重复的OBX。

解决方法

推荐调整key的定义逻辑,以RefId为键索引存文本的Results节点,查询更高效:

<!-- 重新定义key,匹配带RefId的Results节点,用RefId作为索引键 -->
<xsl:key name="refTextMap" match="Results[RefId]" use="RefId"/>  

<xsl:template match="Results/Result">
  <OBR></OBR>
  <!-- 直接用当前Result的Id查询对应Text -->
  <OBX><xsl:value-of select="key('refTextMap', Id)/Text" /></OBX>
</xsl:template>

如果需要保留你原有的key定义,也可以修正for-each的筛选条件:

<xsl:key name="test" match="Results/Result" use="Id"/>  

<xsl:template match="Results/Result">
  <OBR></OBR>
  <!-- 存储当前Result的Id用于筛选 -->
  <xsl:variable name="currId" select="Id" />
  <!-- 从文档根节点查找RefId与当前Id匹配的Results节点 -->
  <xsl:for-each select="/Results[RefId = $currId]">
    <OBX><xsl:value-of select="Text" /></OBX>
  </xsl:for-each>
</xsl:template>

两种方案都可以得到你预期的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:48:03