Gibt es eine bessere Möglichkeit, den übergeordneten Knoten des XPath-Abfrageergebnisses abzurufen?

Markup wie folgt haben:

<div class="foo">
   <div><span class="a1"></span><a href="...">...</a></div>
   <div><span class="a2"></span><a href="...">...</a></div>
   <div><span class="a1"></span>some text</div>
   <div><span class="a3"></span>some text</div>
</div>

Ich bin daran interessiert, alles zu bekommen<a> undsome text NUR wenn benachbartspan ist von klassea1. Also am Ende des gesamten Codes sollte mein Ergebnis sein<a> von zuerstdiv undsome text ab dem dritten. Es wäre einfach, wenn<a> undsome text waren drinnenspan oderdiv hätteclass Attribut, aber kein Glück.

Was ich jetzt mache, ist suchenspan mita1 Klasse:

//div[contains(@class,'foo')]/div/span[contains(@class,'a1')]

dann hole ich mir seine Eltern und mache eine anderequery() mit diesem Elternteil als Kontextknoten. Das sieht einfach alles andere als effizient aus. Die Frage ist also eindeutig, ob es einen besseren Weg gibt, mein Ziel zu erreichen.

DAS ANTWORT-ADDENDUM

Gemäß @MarcBakzeptierte Antwortist die richtige Abfrage:

//div[contains(@class,'foo')]/div/span[contains(@class,'a1')]/..

aber für<a> es könnte besser sein:

//div[contains(@class,'foo')]/div/span[contains(@class,'a1')]/../a

die bekommen die<a> anstelle seines Behälters.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage