position()
Alex Schneider
- xsl
0 fjh0 kaepten0 fjh
0 Alex Schneider0 Alex Schneider
Hallo,
Ich habe in einem Buch einen Widerspruch zu SELFHTML gefunden. Im Buch von Steve Holzner (S.392) steht, position() bezöge sich auf den Kontextknoten und in SELFHTML steht, es bezöge sich auf den aktuellen Knoten.
Beide sind zwar oft dasselbe - aber nicht immer.
Mir wäre es eine große Erleichterung, wenn ich mit Suchmustern bestimmte Knoten anfahren und anschließend diese Position vergleichen könnte (die Elemente liegen selbstverständlich auf gleicher Ebene, ansonsten macht es wohl kaum Sinn).
Gruß
Alex
Hallo,
Ich habe in einem Buch einen Widerspruch zu SELFHTML gefunden. Im Buch von Steve Holzner (S.392) steht, position() bezöge sich auf den Kontextknoten und in SELFHTML steht, es bezöge sich auf den aktuellen Knoten.
Und jetzt möchtest Du wissen, was formal richtig ist oder?
Formal richtig ist: position() bezieht sich auf die Position des Kontextknoten. Den aktuellen Knoten liefert Dir current().
Beide sind zwar oft dasselbe - aber nicht immer.
Ja, daher ist die Unterscheidung im Regelfall auch Haarspalterei, aber wenn man genau sein möchte und streng auf Terminologie achtet, dann sollte man Kontextknoten verwenden statt aktueller Knoten.
Im Grunde liefern "." und current() das gleiche Ergebnis. Ausnahme: bei Verwendung in Prädikaten. Denn der aktuelle Knoten wechselt nicht, wenn innerhalb eines Prädikats ein XPath-Ausdruck ausgewertet wird. Der Kontextknoten aber schon.
Mir wäre es eine große Erleichterung, wenn ich mit Suchmustern bestimmte Knoten anfahren und anschließend diese Position vergleichen könnte (die Elemente liegen selbstverständlich auf gleicher Ebene, ansonsten macht es wohl kaum Sinn).
Äh, und was ist nun Deine Frage?
Gruß
Franz
Hi Franz
Äh, und was ist nun Deine Frage?
Beachtenswert, dass Du auf "keine" Frage solche ausführliche Erläuterungen machen kannst! :-))
cheers
kaepten
Hi kaepten,
Beachtenswert, dass Du auf "keine" Frage solche ausführliche Erläuterungen machen kannst! :-))
Tja, wenn man ins Scwärmen kommt und noch Urlaub hat.... ;-)
Na, aber jetzt gehts raus in die sonnigen Parks von Berlin. Angeblich solls ja sonst überall heute noch regnen, hehe
Gruß
Franz
Äh, und was ist nun Deine Frage?
Gruß
Franz
Hallo Franz,
ich gehe konkret von einem Knoten (bzw. Element aus). Nun suche ich das nächste Element mit mit dem gleichen Attributwert. Ich will es allerdings nur verwenden, wenn dazwischen kein Element auftritt, dass einen höheren Attributwert besitzt.
Veranschaulichung:
...
<ELEMENT Att="23"/> (aktueller Knoten)
<ELEMENT Att="21"/>
<ELEMENT Att="50"/>
<ELEMENT Att="19"/>
<ELEMENT Att="23"/> <= nicht gesucht, da ein Element mit "50" dzw.
...
...
<ELEMENT Att="23"/> (aktueller Knoten)
<ELEMENT Att="21"/>
<ELEMENT Att="23"/> <= gesucht, nächtes Element zur Abarbeitung
<ELEMENT Att="19"/>
<ELEMENT Att="50"/>
...
Gruß
Alex
Äh, und was ist nun Deine Frage?
Gruß
Franz
Hallo Franz,
Ich habe mein Ansinnen überdacht. Man geht also von einem Element aus und schaut, was auf der gleichen Achse folgt.
Man könnte es so formulieren:
Suche das nächstgelegende Folgeelement (following-sibling) mit folgender Bedingung:
Es hat einen Attributwert, der größer oder gleich ist.
Dann schränkt man es nochmals ein:
Es ist nur dann das gesuchte Element, wenn es den gleichen Attributwert besitzt.
Hmmm, das klingt im Grunde genommen nicht einmal schwierig ... aber ich grüble immer noch
Gruß
Alex
So,
nachdem mein Kopf lang geraucht hat, habe ich eine "simple" Lösung gefunden:
<xsl:variable name="FOLLOW" select="following-sibling::*[@level >=current()/@level]"/>
<xsl:if test="$FOLLOW[1]/@level=current()/@level">
<xsl:apply-templates select="$FOLLOW[1]"/>
</xsl:if>
Ja, für so wenig Code habe ich heute lange nachgedacht.
Dafür gibt es doch ein schönen Mathematikerspruch:
negativ reziprob oder wie war das noch Mal?
Gruß
Alex