2009-07-07 3 views
25

Ich verwende Html Agility Pack, um XPath-Abfragen auf einer Webseite auszuführen. Ich möchte die Zeilen in einer Tabelle finden, die ein bestimmtes interessantes Element enthalten. Im folgenden Beispiel möchte ich die zweite Zeile abrufen.Xpath-Abfrage, um Elemente zu finden, die einen bestimmten Nachkommen enthalten

<table name="important"> 
<tr> 
    <td>Stuff I'm NOT interested in</td> 
</tr> 
<tr> 
    <td>Stuff I'm interested in</td> 
    <td><interestingtag/></td> 
    <td>More stuff I'm interested in</td> 
</tr> 
<tr> 
    <td>Stuff I'm NOT interested in</td> 
</tr> 
<tr> 
    <td>Stuff I'm NOT interested in</td> 
</tr> 
</table> 

Ich suche so etwas zu tun:

//table[@name='important']/tr[has a descendant named interestingtag] 

Außer mit gültiger XPath-Syntax. ;-)

Ich nehme an, ich könnte einfach das interessante Element selbst finden und mich dann die Elternkette von dem Knoten hocharbeiten, der zurückkehrt, aber es schien, als müsste es einen Weg geben, dies in einem Schritt zu tun und ich bin nur dicht.

Antwort

46

„hat einen Abkömmling namens interestintag“ .//interestintag in XPath geschrieben ist, so dass der Ausdruck, den Sie für Ihre Suche ist:

//table[@name='important']/tr[.//interestingtag] 
19

Eigentlich Sie ein Nachkomme suchen müssen, kein Kind:

//table[@name='important']/tr[descendant::interestingtag] 
+0

oder, @ Mirod Weg würde auch funktionieren. :-) –

+0

Ausgezeichnet. Das ist sehr hilfreich. Entschuldigung, ich kann zwei Antworten nicht akzeptieren! –

+2

Ich finde es immer lustig, wie viele Möglichkeiten es gibt, um das gewünschte Ergebnis in XPath zu bekommen. Ich glaube // table [@ name = 'wichtig'] // interestingtag // ancestor :: tr sollte auch funktionieren, glaube ich. – mirod

8

ich weiß, das ist nicht das, was die OP fragt, aber wenn Sie ein Element finden wollen, der einen Nachkommen mit einem bestimmten hatte Attribut, könnten Sie so etwas tun:

//table[@name='important']/tr[.//*[@attr='value']] 
+1

aber das war was ich suchte, danke! – Nils

Verwandte Themen