Hallo zusammen,
ich versuche derzeit aus einem xml dokument verschiedene feldlängen auf zu addieren.
mein input hat folgende struktur:
<file name=input">
<gruppe name="gruppe1">
<feld name="feld1xx" laenge="3"/>
<feld name="feld2xs" laenge="18"/>
<feld name="feld3xd" laenge="5"/>
<gruppe name="gruppe2">
<feld name="feld1xx" laenge="3"/>
<feld name="feld2xy" laenge="3"/>
<feld name="feld3xg" laenge="17"/>
</gruppe>
</gruppe>
<gruppe name="gruppe3">
<feld name="feld1" laenge="3"/>
<feld name="feld2" laenge="18"/>
<feld name="feld3" laenge="5"/>
</gruppe>
</file>
herauskommen sollte eine aufstellung wie:
<file name=input">
<gruppe name="gruppe1" gesamtlaenge="26"/>
<gruppe name="gruppe2" gesamtlaenge="23"/>
<gruppe name="gruppe3" gesamtlaenge="26"/>
</file>
mein lösungsansatz war eine variable zum zählen zu verwenden - jedoch musste ich lernen das dies in XSL nciht möglich ist. also bleibt nur ein recursiver aufruf der elemente.
oder: ich könnte vielleicht über den count der felder gehen.
<xsl:template match="/">
<MyXML>
<xsl:for-each select="*/Group">
<xsl:call-template name="addieren">
<xsl:with-param name="a" select="0" />
<xsl:with-param name="c" select="0" />
</xsl:call-template>
</MyXML>
</xsl:template>
<xsl:template name="addieren">
<xsl:param name="a" />
<xsl:param name="c" />
<xsl:variable name="b" select="$a + number(Feld[$c]@length)" />
<xsl:variable name="i" select="$c + 1" />
<xsl:if test="$i < count(Feld)">
<xsl:call-template name="addieren">
<xsl:with-param name="a" select="$b" />
<xsl:with-param name="c" select="$i" />
</xsl:call-template>
</xsl:if>
</xsl:template>
Die lösung ist mir bisher auf papier eingefallen. Jedoch würde sie immer noch das problem aufwerfen wo ich den neuen Gruppentag erstellen kann.
Kann mir bitte jemand eine richtung weisen in die ich forschen könnte, oder hat jeamnd diese art problemstellung schonmal gelöst?
bzw. gibt es einen viel einfacheren lösungsweg den ich übersehen habe?
ich bin ein neuling in XSL und demenstsprechend stoße ich hier leider an meine grenzen.
vielen dank sollte sich jemand meiner problematik annehmen.