XSL Laie: Summe in XSL

Hallo,

Ich möchte die Summe von anz nur für bearbeiter="frau" machen.

<K bearbeiter="mann" datum="20.10.2003" param="1" anz="1"/>
<K bearbeiter="frau" datum="20.10.2003" param="2" anz="2"/>
<K bearbeiter="frau" datum="20.10.2003" param="1" anz="2"/>
<K bearbeiter="frau" datum="20.10.2003" param="1" anz="3"/>

Kann jemand mir helfen?
Danke
XSL Laie

  1. Hi,

    Hallo,

    Ich möchte die Summe von anz nur für bearbeiter="frau" machen.

    <K bearbeiter="mann" datum="20.10.2003" param="1" anz="1"/>
    <K bearbeiter="frau" datum="20.10.2003" param="2" anz="2"/>
    <K bearbeiter="frau" datum="20.10.2003" param="1" anz="2"/>
    <K bearbeiter="frau" datum="20.10.2003" param="1" anz="3"/>

    Dazu brauchst Du die sum(node-set) XPath-Funktion.
    Und ein geeignetes Nodeset.

    Da Du die anz-Attribute von K-Elementen summieren willst:
    K/@anz
    das erwischt aber alle K-Elemente, also weiter einschränken auf diejenigen @anz-Attribute in K-Elementen, deren Papa (also das K-Element) ein Attribut bearbeiter mit Wert Frau, also ../@bearbeiter='frau' haben.

    K/@anz[../@bearbeiter='frau']

    Ausgabe der Summe per xsl:value-of:

    <xsl:value-of select="sum(K/@anz[../@bearbeiter='frau'])"/>

    (evtl. noch den Pfad zum K-Element vor K davorhängen, hängt davon ab, wie das XML aufgebaut ist und in welchem Kontext das entsprechende Template aufgerufen wird).

    (Warnung: obiger Code ist nicht getestet, also keine Funktionsgarantie)

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
    1. Hi,

      Hallo,

      Ich möchte die Summe von anz nur für bearbeiter="frau" machen.

      <K bearbeiter="mann" datum="20.10.2003" param="1" anz="1"/>
      <K bearbeiter="frau" datum="20.10.2003" param="2" anz="2"/>
      <K bearbeiter="frau" datum="20.10.2003" param="1" anz="2"/>
      <K bearbeiter="frau" datum="20.10.2003" param="1" anz="3"/>

      Dazu brauchst Du die sum(node-set) XPath-Funktion.
      Und ein geeignetes Nodeset.

      Da Du die anz-Attribute von K-Elementen summieren willst:
      K/@anz
      das erwischt aber alle K-Elemente, also weiter einschränken auf diejenigen @anz-Attribute in K-Elementen, deren Papa (also das K-Element) ein Attribut bearbeiter mit Wert Frau, also ../@bearbeiter='frau' haben.

      K/@anz[../@bearbeiter='frau']

      Ausgabe der Summe per xsl:value-of:

      <xsl:value-of select="sum(K/@anz[../@bearbeiter='frau'])"/>

      (evtl. noch den Pfad zum K-Element vor K davorhängen, hängt davon ab, wie das XML aufgebaut ist und in welchem Kontext das entsprechende Template aufgerufen wird).

      (Warnung: obiger Code ist nicht getestet, also keine Funktionsgarantie)

      cu,
      Andreas

      Danke :-))

    2. Hallo Andreas,

      Ausgabe der Summe per xsl:value-of:

      <xsl:value-of select="sum(K/@anz[../@bearbeiter='frau'])"/>

      Nur als Tipp:
      <xsl:value-of select="sum(K[@bearbeiter='frau']/@anz)"/>

      Grüße
      Thomas

      1. Hi,

        Nur als Tipp:
        <xsl:value-of select="sum(K[@bearbeiter='frau']/@anz)"/>

        Danke!
        War mir nicht direkt klar, daß ich die Nebenbedingungen (das Zeug in den []) auch weiter oben im Pfad ansetzen darf (hab schon länger selbst nichts mit XSLT gemacht...)

        cu,
        Andreas

        --
        Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
        http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/