Thomas J.S.: fortlaufende Nummerierung

Beitrag lesen

Hallo,

2 Fragen zur Nummerierung. Wie sollte man es anstellen, wenn man eine Variable benutzen möchte, die sich bei jedem Aufruf um den Wert 1 erhöht soll.

a)Ich möchte eine Art Fehlerreport intergrieren und wollte nun die Fehler durchlaufend nummerieren. Die Prüfungen, ob ein Fehler vorliegt sind an verschiedenen Stellen im xsl dokument. Nun soll es so sein, dass ein fehler in form eines Kommentars (oder wie auch immer) ausgegeben wird und dabei noch der wievielte Fehler. Also bräuchte ich eine variable, die immer bei fehler um eins erhöht wird. Ich habe noch keine richtige Lösung gefunden.

Eine geringe Chance besteht dazu (funktioniert wie unter https://forum.selfhtml.org/?t=137147&m=890833):

----------------
<xsl:key name="fehler" match="foo | bar" use="XXXX" />

<xsl:template match="foo">
 <xsl:variable name="this" select="." />
 xsl:choose
  <xsl:when test="XXXX">
   <xsl:for-each select="key('fehler' XXXX)">
    <xsl:if test="generate-id(.) = generate-id($this)">
     <xsl:call-template name="fehler">
      <xsl:with-param name="fehlerNR" select="position()" />
     </xsl:call-template>
    </xsl:if>
   </xsl:for-each>
  </xsl:when>
  xsl:otherwiseOK</xsl:otherwise>
 </xsl:choose>
</xsl:template>

<xsl:template match="bar">
 <xsl:variable name="this" select="." />
 xsl:choose
  <xsl:when test="XXXX">
   <xsl:for-each select="key('fehler' XXXX)">
    <xsl:if test="generate-id(.) = generate-id($this)">
     <xsl:call-template name="fehler">
      <xsl:with-param name="fehlerNR" select="position()" />
     </xsl:call-template>
    </xsl:if>
   </xsl:for-each>
  </xsl:when>
  xsl:otherwiseOK</xsl:otherwise>
 </xsl:choose>
</xsl:template>

<xsl:template name="fehler">
 <xsl:param name="fehlerNR" />
 fehler: <xsl:value-of select="$fehlerNR" />
</xsl:template>
---------------

Die Chance besteht dann, wenn du XXXX als Bedingung so defineren kannst, dass du es an allen drei Stellen verwenden kannst _und_ die Bedingung trifft bei allen Elementen: z.B. wenn XXXX ein Attribut/Element mit meinem Bestimmten Wert ist, kannst du das verwenden, es ist auch möglich dass du XPath-Ausdrücke als Bedingung definierst. Was nicht gehen wird, ist die Hochzählung wenn die Bedingung in jedem Template anders ist.

b)Der andere Fall. ich möchte ein Template nacheinander aufrufen, und auch hier fortlaufende eine Nummer übergeben. Kann man das mit xsl:number realisieren (Es sollte aber in keine Schleife eingebungen werden). Sachverhalt etwa

Verstehe die Frage nicht und wozu überhaupt xsl:number verwenden?
Du kannst ein benanntes Template beliebig oft und an verschiedenen Stellen aufrufen und du kannst dabei jedes Mal andere Parameterwerte übergeben.

Grüße
Thomas