Announcement

Collapse
No announcement yet.

Summe aus vereinzelten Attributen bilden?

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

  • Summe aus vereinzelten Attributen bilden?

    Hallo Leute,
    derzeit hab ich ein kleines Problem, ist glaub ich nicht mal was weltbewegendes, aber ich komm einfach nicht drauf.
    Ausgangssituation: Eine XML Datei mit Umsatzzahlen von Kunden und einigen weiteren Attributen. Die will ich nach PLZ-Gebieten filtern und für jedes PLZ-Gebiet eine Summe der Umsätze machen. Die Fkt sum() geht nur über Kind-Elemente, die es bei mir nicht gibt.
    Bsp.:
    Code:
    <data>
    <record id="1" umsatz="1000.00" ctryCode="D" plz="62283" .... />
    <record id="2" umsatz="2000.00" ctryCode="D" plz="67213" .... />
    <record id="3" umsatz="3000.00" ctryCode="D" plz="58469" .... />
    <record id="4" umsatz="4000.00" ctryCode="D" plz="75139" .... />
    <record id="5" umsatz="5000.00" ctryCode="D" plz="62254" .... />
    .....
    <record id="6" umsatz="6000.00" ctryCode="GB" plz="5800" .... />
    .....
    </data>
    mit folgendem Code konnte ich schon sehr gut die PLZ rausfiltern
    Code:
    <xsl:template match="/">
    <xsl:for-each select="//record[@ctryCode='D' and starts-with(@plz,'6')]">
    <xsl:value-of select="@plz" />: <xsl:value-of select="sum(@betrag1)" />.
    </xsl:for-each>
    </xsl:template>
    Nur wie kann ich jetzt aus meiner Ergebnismenge (Alle Kunden im PLZ-Bereich 6xxxx) die Umsätze zusammen addieren? sum() liefert hier nur die einzelnen Werte (klar, weil da jeweils keine Kinder-Knoten vorhanden)

    Danke schon mal für die Hilfe
    Grüße
    Zuletzt editiert von Gast_1; 10.11.2009, 15:05.

  • #2
    Die sum()-Funktion arbeitet auch über Attributknoten. Dieser Ansatz:

    Code:
    <xsl:template match="data">  
      <xsl:value-of select="sum(//record[@ctryCode='D' and starts-with(@plz,'6')]/@umsatz)"/>
    </xsl:template>
    ergibt im Beipspiel 8000.

    Comment


    • #3
      stimmt, so einfach kann es gehen!
      Danke für den Tip, klappt wunderbar...

      Comment


      • #4
        Jetzt hab ich doch noch eine Frage:
        Ist es eigentlich in irgendeiner Art und Weise möglich, ausgehend von der Code-Zeile
        Code:
        <xsl:value-of select="sum(//record[@ctryCode='D' and starts-with(@plz,'6')]/@umsatz)"/>
        das "@umsatz" mit einer Variable zu ersetzen?
        Code:
        <xsl:variable name="pattern">@umsatz</xsl:variable>
        <xsl:value-of select="sum(//record[@ctryCode='D' and starts-with(@plz,'6')]/$pattern)"/>
        Dann könnte man per Parameter mitgeben, was gesucht/sortiert werden soll...

        Comment


        • #5
          Das ist so machbar:
          Code:
          <xsl:template match="data">  
            <xsl:variable name="pattern" select="'umsatz'"/>
            <xsl:value-of select="sum(//record[@ctryCode='D' and starts-with(@plz,'6')]/attribute::*[name()=$pattern])"/>
          </xsl:template>

          Comment


          • #6
            Klasse, danke!
            Jetzt bin ich erstmal glücklich

            Comment

            Working...
            X