Implementation: Unbekannte Anzahl an Werten addieren

Beitrag lesen

Ich möchte meinen PC aufrüsten und lege eine Liste der Komponenten an:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="Aufr&#252;stplanung.xsl"?>
<COMPUTER xmlns:attr="http://nanoprise.freehostia.de/">
 <Case shop="Caseking" price="59,90">
  <Akasa>AK-ZEN01-WH ZEN</Akasa>
  attr:linkhttp://www.caseking.de/shop/catalog/Gehaeuse/Akasa/Akasa-AK-ZEN01-WH-ZEN-Miditower-white::5993.html</attr:link>
 </Case>
 <Mainboard shop="Mindfactory" price="66,82">
  <Gigabyte>GA-MA770-UD3, 770</Gigabyte>
  attr:linkhttp://www.mindfactory.de/product_info.php/info/p0495062?pid=geizhals</attr:link>
 </Mainboard>
 <CPU shop="Mindfactory" price="168,06">
  <AMD>Phenom II X4 940 BE</AMD>
  attr:linkhttp://www.mindfactory.de/product_info.php/info/p0493341?pid=geizhals</attr:link>
 </CPU>
 <RAM shop="Mindfactory" price="46,83">
  <OCZ>OCZ2P100665GK</OCZ>
  attr:linkhttp://www.mindfactory.de/product_info.php/info/p0426870?pid=geizhals</attr:link>
 </RAM>
 <attr:info label="Gesamt">
  <member>Case</member>
  <member>Mainboard</member>
  <member>CPU</member>
  <member>RAM</member>
 </attr:info>
 <attr:info label="ohne Case">
  <member>Mainboard</member>
  <member>CPU</member>
  <member>RAM</member>
 </attr:info>
</COMPUTER>

Dabei enthält <Case> die Informationen über das Gehäuse, Mainboard die über das Mainboard, usw.
Darin ist jeweils ein Tag mit dem Herstellernamen enthalten, das wiederum den Modellnamen enthält.
Die Tags der Komponenten besitzen die Attribute shop (Shop-Name), price (Preis beim angegebenen Shop) und link (URL zum Produkt), das durch attr:link ersetzt werden kann.

Am Ende der Datei sind 2 Elemente attr:info. Sie sollen den Endpreis in verschiedenen Kombinationen angeben. Die <member>-Elemente, sagen ihnen, welche Komponenten in der Kombination vorhanden sind.

Das XSL-Stylesheet soll diese Preise automatisch ausrechnen.

<xsl:template match="/COMPUTER/attr:info">
  <TR>
   <TD><xsl:value-of select="@label"/>:</TD>
   <TD colspan="2">
    <xsl:for-each select="member">
     <xsl:value-of select="."/>&#32;
    </xsl:for-each>
   </TD>
   <TD>Preis</TD>
  </TR>
</xsl:template>

Doch wie schaffe ich es, die Members auszulesen, das price-Attribut des entsprechenden Tags zu ermitteln und dann alle zu summieren?