Dexter: Brauche Hilfe für Summenfunktion bei xsl

Hallo, ich habe ein mächtiges Problem und hoffe, dass mir einer helfen kann.

ich habe ein xml file etwa so

<test>
<produkt1 grid='51000'>15000</produkt1>
<produkt2 grid='51000'>15000</produkt2>
<produkt3 grid='53000'>15000</produkt3>
<produkt4 grid='63000'>15000</produkt4>
</test>

Jetzt meine Frage, ich wollte gerne die summe ermitteln und hierbei das attribute grid nutzen für die auswahl. also wenn in z.b. produkt1 und produkt 2 addieren will

sum(test[@grid='51000']) aber das funktioniert nicht !?!

und ganz ideal wäre es, wenn ich z.B. die Summe so ermitteln koennte, dass man nach den ersten zeichen des grid abfragt. also z.B. für die summe der ersten drei produkte

sum(test[@grid='5*']) oder so ähnlich !?! Ich habe schon vieles versucht aber es funktioniert nicht ;-) Brauche bitte bitte Hilfe, die xml daten liegen so vor und ich kann an der xml auch nichts ändern.

  1. Hi,

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
     <xsl:template match="/">
      <ausgabe>
       <xsl:value-of select="sum(//test/*[substring(@grid,1,1)='5'])"/>
      </ausgabe>
     </xsl:template>
    </xsl:stylesheet>

    ok?

    Dein Onkel

    1. Besten Dank, Super das mit dem substring genau das Richtige! Das mir das * fehlte hatte ich auch noch nach dem posting noch rausgefunden aber das mit dem substring ist wirklich genial. Jetzt haette ich noch gleich mehrer Fragen, wenn ich sehe, wie fit manche in diesen sachen hier sind aber ich will erst einmal mal selber tuefteln;-) Nur kurz eine frage sein mir erlaubt, da ich schon die ganze zeit rätsle, wie ich es am besten anfange und vielleicht der komperative Vorteil wieder ganz klar auf deiner Seite liegt ;-) Das Beispiel fortgeführt:

      <test>
      <produkt1 schalter="001" grid='51000'>14000</produkt1>
      <produkt1                grid='51000'>11000</produkt1>
      <produkt2 schalter="003" grid='53000'>13000</produkt2>
      <produkt2                grid='63000'>15000</produkt2>
      <produkt3                grid='64000'>18000</produkt3>
      <maschine1 schalter="001" grid='43000'>40000</maschine1>
      <maschine1                grid='44000'>40000</maschine1>
      <maschine2 schalter="003" grid='48000'>40000</maschine2>
      <maschine2                grid='49000'>40000</maschine2>
      <maschine3                grid='49000'>40000</maschine3>
      </test>

      So ich habe nun gewisse Schalter eingebaut(mir fiel nichts besseres ein). Es wird eine xslt Seite im Browser als html Ausgabe generiert in der die produkte und maschinen ohne schalter angezeigt und summiert werden. Nun möchte ich, dass man einen Schalter auswählen kann, so dass die erneute Ausgabe zusätzlich die Werte mit dem Schalter anzeigt und auch die summe inklusive des Wertes mit dem Schlater berechnet wird. Also wenn ich Schalter 003 an habe, dann soll er zum produkt 2 und produkt2 mit schalter 003 anzeigen und mit in die Summe einbeziehen. so und irgendwie will ich dann, dass ich viele Schalter aktiviert habe. jetzt die Frage der Umsetzung. Ich benutze asp und M$XML zum parsen. Was ist die sinvollste Variante? Sollte ich die Schalterwerte als Parametern übergeben? Da habe ich nur das Problem, dass ich die Anzahl der Parameter ja im Stylsheet festlegen muss? Oder gibt es eine elegantere Art? Ich hoffe das Problem ist irgendwie angekommen. Möchte mich aber trotzdem fuer die erste Antwort bedanken. Hat mir schon sehr viel genützt.

      Gruß, Dexter

      Hi,

      <?xml version="1.0" encoding="UTF-8"?>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
      <xsl:template match="/">
        <ausgabe>
         <xsl:value-of select="sum(//test/*[substring(@grid,1,1)='5'])"/>
        </ausgabe>
      </xsl:template>
      </xsl:stylesheet>

      ok?

      Dein Onkel

      1. Hi Dexter,

        eine variable Anzahl an Parametern halte ich für uncool. Ich verstehe deinen Ansatz allerdings nicht genau. Am einfachsten zu verstehen wäre es wohl, wenn du Source und Ziel posten würdest.

        XSL hat Power und ist easy, kannst du mir glauben.
        Dein Onkel

      2. Hallo,

        Ich hoffe das Problem ist irgendwie angekommen.

        Leider nicht. Würdest du es nochmal zu erklären versuchen, was du möchtest?

        Nun möchte ich, dass man einen Schalter auswählen kann, so dass die erneute Ausgabe zusätzlich die Werte mit dem Schalter anzeigt und auch die summe inklusive des Wertes mit dem Schlater berechnet wird. Also wenn ich Schalter 003 an habe, dann soll er zum produkt 2 und produkt2 mit schalter 003 anzeigen und mit in die Summe einbeziehen.

        Dann muss du alle Produkete mit "schalter 003" versehen, die miteinbezogen werden sollen. Denn außer dir weiss niemand und auch XSLT nicht, was du da sonst meinst.

        Grüße
        Thomas

        --
        Surftip: kennen Sie schon Pipolino's Clowntheater?
        http://www.clowntheater-pipolino.net/