Xslt : doppelte Elementinhalte zählen mit Exceptions

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Xslt : doppelte Elementinhalte zählen mit Exceptions

    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:

    Quellcode

    1. <...>
    2. <SPAUDIO>
    3. <LABEL_NAME>Arioala</LABEL_NAME>
    4. <TITLE>Born To Be Wild</TITLE>
    5. <ARTIST_LIST>Frank Sinatra</ARTIST_LIST>
    6. <PLAYTIME>339</PLAYTIME>
    7. <SPPRICE>
    8. <CURRENCY>EUR</CURRENCY>
    9. <SALES_COUNTRY>AUT</SALES_COUNTRY>
    10. <TAX>20</TAX>
    11. <EVP>139</EVP>
    12. </SPPRICE>
    13. </SPAUDIO>
    14. <SPAUDIO>
    15. <LABEL_NAME>Arioala</LABEL_NAME>
    16. <TITLE>Born To Be Wild</TITLE>
    17. <ARTIST_LIST>Frank Sinatra</ARTIST_LIST>
    18. <PLAYTIME>339</PLAYTIME>
    19. <SPPRICE>
    20. <CURRENCY>EUR</CURRENCY>
    21. <SALES_COUNTRY>DEU</SALES_COUNTRY>
    22. <TAX>20</TAX>
    23. <EVP>139</EVP>
    24. </SPPRICE>
    25. </SPAUDIO>
    26. <SPAUDIO>
    27. <LABEL_NAME>Arioala</LABEL_NAME>
    28. <TITLE>Born To Be Wild</TITLE>
    29. <ARTIST_LIST>Frank Sinatra</ARTIST_LIST>
    30. <PLAYTIME>339</PLAYTIME>
    31. <SPPRICE>
    32. <CURRENCY>EUR</CURRENCY>
    33. <SALES_COUNTRY>USA</SALES_COUNTRY>
    34. <TAX>0</TAX>
    35. <EVP>139</EVP>
    36. </SPPRICE>
    37. </SPAUDIO>
    38. </...>
    Alles anzeigen




    mein bisheriges stylesheet sieht folgendermaßen aus:

    XML-Quellcode

    1. <?xml version="1.0"?>
    2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    3. <xsl:output method="html" indent="yes"/>
    4. <xsl:key name="Track_Count" match="//SPAUDIO/TITLE" use="."/>
    5. <xsl:template match="/">
    6. <table border="solid black 2px">
    7. <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>
    8. <xsl:apply-templates select="REPORT"/>
    9. </table>
    10. </xsl:template>
    11. <xsl:template match="REPORT">
    12. <xsl:for-each select="//SPAUDIO/TITLE[generate-id()= generate-id(key('Track_Count',.)[1])]">
    13. <xsl:sort select="count(key('Track_Count',.))" order="ascending"/>
    14. <tr>
    15. <td><xsl:value-of select="../ARTIST_LIST"/></td>
    16. <td><xsl:value-of select="."/></td>
    17. <td><xsl:value-of select="count(key('Track_Count',.))"/></td>
    18. <td><xsl:value-of select="(../SPPRICE/EVP - ((../SPPRICE/EVP div 120) * ../SPPRICE/TAX)) div 100"/></td>
    19. <td><xsl:value-of select="../SPPRICE/TAX"/></td>
    20. <td><xsl:value-of select="count(key('Track_Count',.)) * ((../SPPRICE/EVP - ((../SPPRICE/EVP div 120) * ../SPPRICE/TAX)) div 100)"/></td>
    21. </tr>
    22. </xsl:for-each>
    23. </xsl:template>
    24. </xsl:stylesheet>
    Alles anzeigen


    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!!

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von curd ()