Summe mit Vergleich von Elementen im Knoten
SteffenW
- xsl
0 Holge r
Hallo,
folgendes Problem, meine XML Datei besteht aus einem Artikelstamm und der Bestellinformation eines Kunden. Ich will einfach nur eine Übersicht wieviele Einheiten er schon für jedes Produkt bestellt hat:
<report>
<tables>
<table prefix="AR">
<ItemNo.>21144001</ItemNo.>
<ItemDescription>Tisch A</ItemDescription>
</table>
<table prefix="AR">
<ItemNo.>3253813</ItemNo.>
<ItemDescription>Stuhl B</ItemDescription>
</table>
<!-- usw. mehrere Artikel folgen noch-->
<table prefix="KP">
<LastName>Mustermann</LastName>
<FirstName>Max</FirstName>
<tables>
<table prefix="BE">
<date>1.1.2010</date>
<ItemNo.>21144001</ItemNo.>
<ItemDescription>Tisch A</ItemDescription>
<Order>1</Order>
</table>
<table prefix="BE">
<date>2.1.2010</date>
<ItemNo.>21144001</ItemNo.>
<ItemDescription>Tisch A</ItemDescription>
<Order>1</Order>
</table>
</tables>
</table>
</tables>
</report>
Was ich nun probiert habe funktioniert natürlich nicht:
<xsl:stylesheet...>
<xsl:for-each select="report/tables/table[@tableshort = 'AR']>
<tr>
<xsl:variable name="artikelnr" select="ItemNo."/>
<td width="250px">
<xsl:value-of select="ItemDescription"/>
</td>
<td width="40px">
<xsl:value-of select="$artikelnr"/>
</td>
<td>
<xsl:for-each select="/report/tables/table[@prefix='KP']/tables">
<xsl:if test="table/ItemNo. = $artikelnr">
<xsl:value-of select="sum(table[@prefix='BE']/Order)"/>
</xsl:if>
</xsl:for-each>
</td>
</tr>
</xsl:stylesheet>
Damit summiert er mir dummerweise nur alle Gesamtbestellungen für jeden Artikel den es gibt - macht er ja richtig :).. nur ist es nicht das, was ich suche.
Ich hab irgendwas von xsl:key und generate-id() gelesen - wäre das für mein Beispiel die Lösung?
Steffen
Also so genau weiss ich nicht was du willst: wie sieht es damit aus?
<xsl:for-each select="report/tables/table[@tableshort = 'AR']>
<tr>
<xsl:variable name="artikelnr" select="ItemNo."/>
<td width="250px">
<xsl:value-of select="ItemDescription"/>
</td>
<td width="40px">
<xsl:value-of select="$artikelnr"/>
</td>
<td>
<xsl:for-each select="/report/tables/table[@prefix='KP']/tables">
<xsl:value-of select="sum(table[@prefix='BE' and ItemNo. = $artikelnr]/Order)"/>
</xsl:for-each>
</td>
</tr>
</xsl:for-each>
Das mit den key und generate-id(0 verwendet man, wenn gruppierung mit xslt1.0 erforderlich ist.
Gruss, Holge r