Markus B.: Xsl:sort in einer for-each "schleife" mit increment! Problem

Also ich habe eine for each schleife, in der Ich ein increment machen möchte. Ich weiss dass es in einem Template geht, aber ich brauche die sort funktion bzw. eine funktion die gnauso funktioniert.

Problem ist dass der counter immer wieder auf 1 zurückgesetzt wird in der for-each "schleife". Wenn ich nun ein Template match machen will kann ich zwar den counter erhöhen, aber ich kann keine xsl:sort funktion machen, gibts es da vl. noch eine andere Funktion die dann Funktionier? Oder wie kann ich dieses Problem sonst lösen?

Xml:

<data>  
    <name name="Computer">  
        <value>10.0</value>  
    </name>  
    <name name="Lohn">  
        <value>13.0</value>  
    </name>  
    <name name="Haushaltsartikelliste">  
        <value>6.8</value>  
    </name>  
    <name name="Strom">  
        <value>7.0</value>  
    </name>  
</data>  

xsl:

  
<?xml version="1.0" encoding="UTF-8"?>  
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"  
    xmlns="http://www.w3.org/2000/svg">  
    <xsl:output method="xml" omit-xml-declaration="no" indent="yes" version="1.0"  
        doctype-system="-//W3C//DTD SVG 1.1//EN"  
        doctype-public="http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"/>  
  
    <xsl:template match="/">  
        <xsl:processing-instruction name="xml-stylesheet">type="text/css"  
            href="Pfad Css"</xsl:processing-instruction>  
        <svg xmlns="http://www.w3.org/2000/svg" version="1.0" width="50%" height="50%">  
<xsl:apply-templates select="/data"></xsl:apply-templates>  
        </svg>  
          </xsl:template>  
    <xsl:template name="name" match="/data">  
        <xsl:param name="counter">1</xsl:param>  
        <xsl:for-each select="name">  
                 <xsl:sort select="value" data-type="number" order="descending"/>  
            <text x="1%" y="{$counter}%"><xsl:value-of select="@name"/></text>  
            <text><xsl:value-of select="value"/></text>  
          <xsl:call-template name="name">  
              <xsl:with-param name="counter" select="$counter+1"></xsl:with-param>  
          </xsl:call-template>  
        </xsl:for-each>  
  
      </xsl:template>  
</xsl:stylesheet>  

Danke und MfG

Markus

  1. Hallo Markus,

    Problem ist dass der counter immer wieder auf 1 zurückgesetzt wird in der for-each "schleife". Wenn ich nun ein Template match machen will kann ich zwar den counter erhöhen, aber ich kann keine xsl:sort funktion machen, gibts es da vl. noch eine andere Funktion die dann Funktionier? Oder wie kann ich dieses Problem sonst lösen?

    Wenn ich das richtig deute, sollte die Abfrage von position() als fortlaufende Zählung innerhalb von xsl:for-each ausreichen.

    Grüße,
    Thomas

    1. Wenn ich das richtig deute, sollte die Abfrage von position() als fortlaufende Zählung innerhalb von xsl:for-each ausreichen.

      Stimmt sollte so klappen,

      Danke