whine: Rechnen mit Vorgänger - Nachfolger

Hallo zusammen,

ich habe folgende XML-Struktur

...
<M>
 <P>SONNE</P>
 <GRT_G>179</GRT_G>
 </M>
<M>
 <P>SONNE</P>
 <GRT_G>194</GRT_G>
</M>
<M>
 <P>SONNE</P>
 <GRT_G>211</GRT_G>
</M>
...

und ich versuche mittels XSLT die 179 von der 194 zu subtrahieren, die 194 von der 211 usw.

Meine zaghaften Versuche in XSLT:


<xsl:for-each select="M">
 <xsl:variable name="vorg" select="number(preceding-sibling::GRT_G)"/>
 <xsl:variable name="grt_g" select="number(GRT_G)"/>
 <xsl:variable name="dif_grt" select="$grt_g - $vorg"/>
 <xsl:value-of select="dif_grt"/>
</xsl:for-each>

Trotz number bekome ich in der Ausgabe NaN. Weiß jemand Rat?

Gruß whine

  1. Hallo whine,

    und ich versuche mittels XSLT die 179 von der 194 zu subtrahieren, die 194 von der 211 usw.

    Meine zaghaften Versuche in XSLT:

    <xsl:for-each select="M">
     <xsl:variable name="vorg" select="number(preceding-sibling::GRT_G)"/>
     <xsl:variable name="grt_g" select="number(GRT_G)"/>
     <xsl:variable name="dif_grt" select="$grt_g - $vorg"/>
     <xsl:value-of select="dif_grt"/>
    </xsl:for-each>
    

    Trotz number bekome ich in der Ausgabe NaN. Weiß jemand Rat?

    <xsl:for-each select="M">
      <xsl:variable name="vorg" select="number(preceding-sibling::M[1]/GRT_G)"/>
      <xsl:variable name="grt_g" select="number(GRT_G)"/>
      <xsl:variable name="dif_grt" select="$grt_g - $vorg"/>
      <xsl:value-of select="$dif_grt"/>
    </xsl:for-each>
    

    Die Achse bezieht sich auf den M-Vorgänger und zwar den jeweils ersten, also M[1] und darunter liegt das gesuchte GRT_G. Bei der Ausgabe via xsl:value-of fehlte noch das $-Zeichen.

    Bei der ersten Abfrage kommt dennoch NaN, da kein Vorgänger vorhanden ist, alternativ $vorg z. B. so aufbauen:

    <xsl:variable name="vorg">
      <xsl:choose>
        <xsl:when test="preceding-sibling::M[1]/GRT_G">
          <xsl:value-of select="number(preceding-sibling::M[1]/GRT_G)"/>
        </xsl:when>
        <xsl:otherwise>0</xsl:otherwise>
      </xsl:choose>
    </xsl:variable>
    

    Grüße, Thomas

    1. Hallo Thomas,

      coole Sache, funktioniert. Vielen Dank!

      whine

      Die Achse bezieht sich auf den M-Vorgänger und zwar den jeweils ersten, also M[1] und darunter liegt das gesuchte GRT_G. Bei der Ausgabe via xsl:value-of fehlte noch das $-Zeichen.

      Grüße, Thomas