2009-03-28 11 views
1

ist Folgendes möglich in einem XPath-Ausdruck (siehe Beispiel unten):XPath: alle Wählen Sie eine Knoten und alle B-Knoten, die nicht innerhalb eines Ein Knoten sind

Wählen Sie alle (span-Tags der Klasse msg) UND Alle ((img-Tags, die ein nicht-leeres alt-Attribut) UND (nICHT in einem span-Tag der Klasse msg) haben sie)

Vereinfachtes Beispiel:

<span class="msg">Message text A</span> 
<img alt="" /> 
<span class="msg">Message text B <img alt="text A" /></span> 
<span class="err">Error text C <img alt="text B" /></span> 
<img alt="text C" /> 
<span class="err">Error text D</span> 

sollte Der resultierende Knotensatz enthalten:

<span class="msg">Message text A</span> 
<span class="msg">Message text B <img alt="text A" /></span> 
<img alt="text B" />  
<img alt="text C" /> 

Antwort

7

Nicht getestet, aber so etwas wie?

//span[@class='msg'] | //img[@alt!='' and not(ancestor::span[@class='msg'])] 
+0

Danke, das funktioniert perfekt! Ich habe das erste "not (Vorgänger :: ..." entfernt, da das Material keine msg span innerhalb msg spans enthalten kann. Es speicherte zwei Iterationen durch die gleichen Daten und beschleunigte so die Dinge. – barry

+0

OK - Ich habe einige Klammern falsch gezählt; -p –

Verwandte Themen