SteffenW: Summe mit Vergleich von Elementen im Knoten

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

  1. 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