Announcement

Collapse
No announcement yet.

Vorgängerknoten zählen deren Wert größer 0 ist!

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

  • Vorgängerknoten zählen deren Wert größer 0 ist!

    Hey,

    erstmal hallo zusammen. Bin vorher durchs googlen auf das Forum gestoßen und hoffe ihr könnt mir helfen. Und zwar hab ich eine XML die wie eine Matrix aufgebaut ist. Sie sieht so aus:

    <row rowID="1">
    <column columnID="1">0</column>
    <column columnID="2">1</column>
    <column columnID="3">0</column>
    <column columnID="4">3</column>
    ....etc
    </row>
    <row rowID="2">
    <column columnID="1">1</column>
    <column columnID="2">4</column>
    <column columnID="3">2</column>
    ...etc
    </row>
    <row rowID="3">
    <column columnID="1">2</column>
    <column columnID="2">3</column>
    <column columnID="3">1</column>
    ...etc
    </row>


    Ich durchlauf die ROWS in ner Schleife und dabei immer nur die Column mit der columnID = 1. Nun will ich bei jedem Schleifedurchgang wissen, wieviele Vorgänger Knoten es gibt bei denen der Wert > 0 ist.

    Und ich dachte das geht vielleicht so:

    <xsl:value-of select="count(preceding-sibling::row[@columnID =1] > 0)"/>

    Leider erhalte ich so immer den Wert 1, ohne das größer null erhalte ich natürlich alle Vorgänger. Geht ein größer Vergleich nur in einer nem IF-Statement? Wenn ja wie baue ich das dort ein?

    Achso ziel ist quasi so ne Art Counter. Ich mach das Ergebnis von Count dann noch + 1. Dann müsste ich ja wissen der wievielte Knoten das ist wo größer 0 ist.

    Hoffe das war halbwegs verständlich.

    Gruß und Danke convex

  • #2
    count() erwartet eine Knotenmenge, in diesem Fall hilft vermutlich diese Abfrage (es fehlte auch noch die Referenz auf das column-Element):
    Code:
    <xsl:value-of select="count(preceding-sibling::row[column/@columnID = 1])[. > 0]"/>

    Comment


    • #3
      Erstmal danke für deine Hilfe, aber klappt irgendwie noch nicht, versteh deine Lösung aber auch nicht.

      Ich will ja als Ergebnis die Anzahl der Vorgänger die als Wert > 0 haben.
      Und du zählst ja alle Vorgänger und dann kommt die eckige Klammer mit dem größer 0:

      HTML Code:
      [. > 0]"/>
      Versteh nicht was da passieren soll. Als Ergebnis zählt es mir auch alle Vorgänger. Hätte gesagt, dass da auch nicht weniger rauskommen kann, da er erst zählt und dann irgendwie ein Vergleich > statt findet. Noch ne Idee?

      Hätte auch gesagt, dass das wenn dann so heißen muss:

      HTML Code:
      <xsl:value-of select="count(preceding-sibling::row/column[@columnID = 1])[. > 0]"/>
      Aber geht glaub beides.

      Ach ja das mit der fehlenden Referenz auf das Column Element, da hattest natürlich recht.

      Gruß und Danke
      Zuletzt editiert von convex; 09.09.2008, 16:20.

      Comment


      • #4
        Ich erhalte die Werte 1 bzw. 2 für den zweiten bzw. dritten row-Knoten, da diese die entsprechenden Vorläufer haben. Erläutere ansonsten mal genauer, was gesucht ist.

        Comment


        • #5
          Hey,

          also für Column mit ID=1:

          für den ersten Row-Knoten müsste 0 raus kommen da dieser ja kein Vorgänger hat.
          für den zweiten Row-Knoten müsste ebenfalls 0 vorkommen, da er zwar nen Vorgänger hat, dieser aber nicht > 0 ist.
          für den dritten Row-Knoten müsste 1 raus kommen, da dieser 2 Vorgänger hat aber nur einer > 0 ist.

          Weißt du nun was ich meine. Muss zu geben, habe deine Antwort schon wieder net richtig verstanden. *G*
          Ich hab deine Antwort so verstanden, dass der 2. und der 3. Row-Knoten jeweils zwei ergebnise haben und zwar 1 und 2. Aber jeder Knoten kann ja nur 1 Ergebnis als Anzahl Vorgänger haben.


          Gruß und Danke für deine Mühe

          Comment


          • #6
            Dann probiere es so, runde Klammer versetzt, liefert 0 0 1:
            Code:
            <xsl:value-of select="count(preceding-sibling::row/column[@columnID = 1][. > 0])"/>

            Comment


            • #7
              Hey,

              also erstmal vielen Dank für deine Geduld und Hilfe. Hätte schwören können dass ich das getestet hab, nachdem du mir die erste Anweisung geschickt hast, aber war wohl nicht so.

              Jetzt funktioniert es!!

              Nur noch so fürs Verständnis, wird erst mit der letzten Eckigen Klammer aufs aktuelle Element zugeriffen? Normal funktioniert das doch eigentlich auch ohne oder?

              Gruß und Danke nochmal

              Comment


              • #8
                Die Unterscheidung besteht im Abfragen von Werten (Knoteninhalten) oder dem Ermitteln von Knotenmengen nach bestimmten Bedingungen und für die letztere Aufgabe bieten sich Prädikate an.

                Comment


                • #9
                  Ah ok vielen Dank!

                  Comment

                  Working...
                  X