Marcus : Auf vorheriges Element zugreifen

Hallo

Ich habe eine Frage bzgl. XSL. Ich möchte ein dynamisches Liniendiagramm mittels einem Stylesheet in SVG ausgeben. Um dies zu realisieren benötige ich eine Schleife, die jeweils den vorherigen Wert eines Elementes aus dem XML-Dokument in eine Variable (Anzahl_alt) schreibt. Momentan habe ich dazu eine "for-each" Schleife  und habe mich an "preceding:: ..." versucht. Dies scheint aber nicht zu funktionieren, da mir mit preceding immer derselbe Wert ausgegeben wird.
Hat evtl. jemand eine Idee wie man das lösen kann. Zum besseren Verständnis habe ich hier noch mal einen Teil meines Codes angehängt:

<xsl:for-each select="Pie/ExposureTime">

<xsl:sort select="Anzahl" data-type="number" order="descending"/>
<xsl:variable name="i" select="position() - 1"/>
<xsl:variable name="Anzahl">
                    <xsl:value-of select="Anzahl"/>
</xsl:variable>

<xsl:variable name="Anzahl_alt">
        <xsl:value-of select="number(preceding::Anzahl/text())"/>
</xsl:variable>

  1. Tach Marcus,

    Ich habe eine Frage bzgl. XSL. Ich möchte ein dynamisches Liniendiagramm mittels einem Stylesheet in SVG ausgeben. Um dies zu realisieren benötige ich eine Schleife, die jeweils den vorherigen Wert eines Elementes aus dem XML-Dokument in eine Variable (Anzahl_alt) schreibt.

    Zeige mal einen Ausschnitt aus dem XML-Dokument, welcher den "vorherigen Wert" verdeutlicht.

    Man liest sich,
    svg4you

    1. Hallo svg4you

      Zeige mal einen Ausschnitt aus dem XML-Dokument, welcher den "vorherigen Wert" verdeutlicht.

      Hier hab ich einen Auschnitt aus dem XML-Dokument  - es soll also jeweils das vorherige "Anzahl"-Element zu der aktuellen Position in der for-each Schleife übergeben werden:

      <ExposureTime>
         <Wert>160sec</Wert>
         <Anzahl>12</Anzahl>
      </ExposureTime>
      <ExposureTime>
         <Wert>18sec</Wert>
         <Anzahl>2</Anzahl>
      </ExposureTime>
      <ExposureTime>
         <Wert>2sec</Wert>
         <Anzahl>1</Anzahl>
      </ExposureTime>
      <ExposureTime>
         <Wert>138sec</Wert>
         <Anzahl>1</Anzahl>
      </ExposureTime>
      <ExposureTime>
         <Wert>1320sec</Wert>
         <Anzahl>1</Anzahl>
      </ExposureTime>
      <ExposureTime>
         <Wert>1280sec</Wert>
         <Anzahl>1</Anzahl>
      </ExposureTime>

      Grüße , Marcus

      1. Tach Marcus,

        Hier hab ich einen Auschnitt aus dem XML-Dokument  - es soll also jeweils das vorherige "Anzahl"-Element zu der aktuellen Position in der for-each Schleife übergeben werden:

        Ein Ansatz:

          
        <xsl:for-each select="ExposureTime">  
          <xsl:value-of select="position()"/>:<xsl:value-of select="preceding-sibling::ExposureTime[count(*)-1]/Anzahl/text()"/>  
          <br />  
        </xsl:for-each>
        

        Ergebnis [bei position()=1 gibt es keinen vorherigen Geschwisterknoten]:

        1:
        2:12
        3:2
        4:1
        5:1
        6:1

        Man liest sich,
        svg4you

        1. Hallo svg4you,

          das war genau das was ich suchte. Der erste Knoten fällt bei meiner Anwendung sowieso raus. Also besten Dank noch mal.

          Gruß , Marcus