Hallo!
Probiere es mal so: li[not(@class='visited')][span[@class='posting'] | span/span[@class='posting']]
Die Idee hatte ich auch schon, aber wie ich vermutete, liefert mir das alle li-Elemente, für die die Bedingung im [...] zutrifft.
Nun brauche ich letztlich die span-Elemente, weil ich aus deren Kindelementen Daten auslesen will. Ich müsste mich also noch im DOM herunter hangeln oder den (span | span/span)-Teil mit weiteren XPath-Abfragen wiederholen.
Ich habe jetzt mal folgende Variante gewählt und die Sache vereinfacht:
Zuerst hole ich mir alle li-Elemente:
descendant::li[contains(@class, 'own-posting')]/ul/li[not(contains(@class, 'visited'))]
Durchlaufe diese Elemente und hole mir jeweils das span-Element:
(span | span/span)[contains(@class, 'posting')]
Und letztlich die Daten, die ich daraus brauche:
span[contains(@class, 'subject')]/a
span[contains(@class, 'author')]
Jetzt bin ich bei Firefox 2 bei 32ms, und da ich für neuere Browser auf das viel schnellere querySelectorAll setze, lohnt es sich glaube ich nicht mehr, das weiter zu optimieren.
Danke aber für deine Vorschläge!
Mathias