Announcement

Collapse
No announcement yet.

XSLT : doppelte Elemente zählen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • XSLT : doppelte Elemente zählen

    Hallo, ich bin neu hier und habe folgendes Problem:

    Ich habe einen xml datensatz für audioprodukte und soll für die uni eine rechnungsdarstellung in xlst bauen. dabei sollen produkte die den gleichen titel und mwst. satz haben summiert werden.

    hier ein auszug aus dem datensatz:

    Code:
    <...>
    <SPAUDIO>
     <LABEL_NAME>Arioala</LABEL_NAME>
     <TITLE>Born To Be Wild</TITLE>
     <ARTIST_LIST>Frank Sinatra</ARTIST_LIST>
     <PLAYTIME>339</PLAYTIME>
     <SPPRICE>
     	<CURRENCY>EUR</CURRENCY>
     	<SALES_COUNTRY>AUT</SALES_COUNTRY>
        <TAX>20</TAX>
        <EVP>139</EVP>
     </SPPRICE>
    </SPAUDIO>
    <SPAUDIO>
     <LABEL_NAME>Arioala</LABEL_NAME>
     <TITLE>Born To Be Wild</TITLE>
     <ARTIST_LIST>Frank Sinatra</ARTIST_LIST>
     <PLAYTIME>339</PLAYTIME>
     <SPPRICE>
     	<CURRENCY>EUR</CURRENCY>
     	<SALES_COUNTRY>DEU</SALES_COUNTRY>
        <TAX>20</TAX>
        <EVP>139</EVP>
     </SPPRICE>
    </SPAUDIO>
    <SPAUDIO>
     <LABEL_NAME>Arioala</LABEL_NAME>
     <TITLE>Born To Be Wild</TITLE>
     <ARTIST_LIST>Frank Sinatra</ARTIST_LIST>
     <PLAYTIME>339</PLAYTIME>
     <SPPRICE>
     	<CURRENCY>EUR</CURRENCY>
     	<SALES_COUNTRY>USA</SALES_COUNTRY>
        <TAX>0</TAX>
        <EVP>139</EVP>
     </SPPRICE>
    </SPAUDIO>
    </...>


    mein bisheriges stylesheet sieht folgendermaßen aus:

    Code:
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" indent="yes"/>	
     <xsl:key name="Track_Count" match="//SPAUDIO/TITLE" use="."/>
      <xsl:template match="/">
          <table border="solid black 2px">
    	<tr><th>Artist Name</th><th>Track Name</th><th>Units Sold</th><th>Net Sales Price €</th><th>TAX</th><th>Net Revenue</th></tr>
    	<xsl:apply-templates select="REPORT"/>
    	</table>
     </xsl:template>
    
     <xsl:template match="REPORT">	
        <xsl:for-each select="//SPAUDIO/TITLE[generate-id()= generate-id(key('Track_Count',.)[1])]">
        <xsl:sort select="count(key('Track_Count',.))" order="ascending"/>
            <tr>
    	<td><xsl:value-of select="../ARTIST_LIST"/></td>
    	<td><xsl:value-of select="."/></td>
    	<td><xsl:value-of select="count(key('Track_Count',.))"/></td>
    	<td><xsl:value-of select="(../SPPRICE/EVP - ((../SPPRICE/EVP div 120) * ../SPPRICE/TAX))  div 100"/></td>
    	<td><xsl:value-of select="../SPPRICE/TAX"/></td>
    	<td><xsl:value-of select="count(key('Track_Count',.)) * ((../SPPRICE/EVP - ((../SPPRICE/EVP div 120) * ../SPPRICE/TAX))  div 100)"/></td>	
    	</tr>
        </xsl:for-each>
     </xsl:template>
    </xsl:stylesheet>
    Ergebnis ist nun, dass alle Titel aufsummiert werden egal ob Sie die gleiche MwSt haben oder nicht:

    Artist Title Units Sold Net Sales Price € TAX Net Revenue
    Frank Sinatra Born To Be Wild 3 1.1583 20 3.4749

    Anstelle von:

    Artist Title Units Sold Net Sales Price € TAX Net Revenue
    Frank Sinatra Born To Be Wild 2 1.1583 20 2,3166
    Frank Sinatra Born To Be Wild 1 1.390 20 1.390

    Hab schon alles probiert und bin ziemlich verzweifelt!
    Bitte um Hilfe!!
Working...
X