przyrost warunkowy xslt

Mam problemy ze zwiększaniem licznika pod pewnymi warunkami.

Wkład:

<Users>
  <User>
    <id>1</id>
    <username>jack</username>
  </User>
  <User>
    <id>2</id>
    <username>bob</username>
  </User>
  <User>
    <id>3</id>
    <username>bob</username>
  </User>
  <User>
    <id>4</id>
    <username>jack</username>
  </User>
</Users>

Poszukiwany wynik:

<Users>
  <User>
    <id>1</id>
    <username>jack01</username>
  </User>
  <User>
    <id>2</id>
    <username>bob01</username>
  </User>
  <User>
    <id>3</id>
    <username>bob02</username>
  </User>
  <User>
    <id>4</id>
    <username>jack02</username>
  </User>
</Users>

Aby wykonać ten następujący algorytm, można użyć:

sortuj dane wejściowe według nazwy użytkownikadla każdego użytkownikagdy poprzednia nazwa użytkownika jest równa bieżącej nazwie użytkownikalicznik przyrostu iustaw nazwę użytkownika na „$ username $ counter”Inaczejustaw licznik na 1(ponownie sortuj według identyfikatora - nie jest to konieczne)

Więc spróbowałem przekształcić to w XSLT:

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

  <xsl:template match="Users">
    <Users>
    <xsl:apply-templates select="create_user">
      <xsl:sort select="User/username"/>
    </xsl:apply-templates>
    </Users>
  </xsl:template>

  <xsl:template match="create_user">
    <id><xsl:value-of select="id"/></id>
    <xsl:choose>
      <xsl:when test="username=(preceding-sibling::User[1]//username)">
        <xsl:variable name="count">
          <xsl:number format="01"/>
        </xsl:variable>
        <username><xsl:value-of select="concat(username, $count)"/></username>
      </xsl:when>
      <xsl:otherwise>
        <xsl:variable name="count">
          <xsl:number value="1" format="01"/>
        </xsl:variable>
        <username><xsl:value-of select="concat(username, $count)"/></username>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
</xsl:stylesheet>    

Wykonując to, otrzymuję następujące błędy:

nazwy użytkowników nie sortująlicznik nie zwiększa sięzamiast tego gdy warunek pasuje, licznik będzie bieżącą pozycją węzła.dla naszego przykładu węzeł o id = 3 miałby nazwę użytkownika = bob03tag brakuje

jakieś pomysły?

questionAnswers(2)

yourAnswerToTheQuestion