使用键收集不同的值无法按预期工作

Collecting distinct values with key does not work as expected

我有以下 XML:

<planning>
  <visit>
    <nr>001</nr>
    <action>
      <code>CA01</code>
    </action>
    <action>
      <code>CA02</code>
    </action>
    <action>
      <code>CA03</code>
    </action>
    <action>
      <code>CA01</code>
    </action>
    <action>
      <code>CA02</code>
    </action>
    <action>
      <code>CA03</code>
    </action>
  </visit>
  <visit>
    <nr>002</nr>
    <action>
      <code>CA01</code>
    </action>
    <action>
      <code>CA02</code>
    </action>
    <action>
      <code>CA03</code>
    </action>
    <action>
      <code>CA02</code>
    </action>
    <action>
      <code>CE03</code>
    </action>
    <action>
      <code>CE03</code>
    </action>
  </visit>
</planning>

我希望为每次访问列出不同的代码。 我的 XSLT 是:

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml"
              indent="yes" />
  <xsl:strip-space elements="*" />

  <xsl:key name="codekey" match="action" use="code"/>

  <xsl:template match="/">
    <visits>
      <xsl:for-each select="/planning/visit">
        <visit>
          <nr><xsl:value-of select="nr"/></nr>
          <codes>
            <xsl:for-each select="action[generate-id()=generate-id(key('codekey',code)[1])]">
              <xsl:value-of select="code"/>
              <xsl:if test="not(position()=last())">
                <xsl:text>, </xsl:text>
              </xsl:if>
            </xsl:for-each>
          </codes>
        </visit>
      </xsl:for-each>
    </visits>
  </xsl:template>

</xsl:stylesheet>

然而,输出

<visits>
    <visit>
        <nr>001</nr>
        <codes>CA01, CA02, CA03</codes>
    </visit>
    <visit>
        <nr>002</nr>
        <codes>CE03</codes>
    </visit>
</visits>

我预计访问 002 的代码是 CA01, CA02, CA03, CE03。 确实,当我转换时只访问 002:

<planning>
  <visit>
    <nr>002</nr>
    <action>
      <code>CA01</code>
    </action>
    <action>
      <code>CA02</code>
    </action>
    <action>
      <code>CA03</code>
    </action>
    <action>
      <code>CA02</code>
    </action>
    <action>
      <code>CE03</code>
    </action>
    <action>
      <code>CE03</code>
    </action>
  </visit>
</planning>

输出如我所料:

<visits>
    <visit>
        <nr>002</nr>
        <codes>CA01, CA02, CA03, CE03</codes>
    </visit>
</visits>

我应该怎么做才能得到我想要的结果?

使用 use="concat(../nr, '+', code)"use="concat(generate-id(..), '+', code)" 作为键定义,当然,然后在使用键函数的地方使用相同的表达式,例如action[generate-id()=generate-id(key('codekey', concat(../nr, '+', code))[1])].