wake-up-neo.com

Xpath-Abfrage, um Elemente zu finden, die einen bestimmten Nachkommen enthalten

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.

<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 schaue, um so etwas zu tun:

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

Außer bei gültiger Xpath-Syntax. ;-)

Ich vermute, ich könnte einfach das interessante Element selbst finden und mich dann von dem zurückgegebenen Knoten aus in der übergeordneten Kette nach oben arbeiten, aber es schien, als müsste es einen Weg geben, dies in einem Schritt zu tun, und ich bin einfach dicht.

32
Jeremy Stein

"hat einen Nachkommen namens interestintag" wird in XPath .//interestintag geschrieben, der Ausdruck, den Sie suchen, lautet also: 

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

Eigentlich müssen Sie nach einem Nachkommen suchen, nicht nach einem Kind:

//table[@name='important']/tr[descendant::interestingtag]
19
Scott Baker

Ich weiß, das war nicht das, was das OP gefragt hat, aber wenn Sie ein Element finden wollten, das einen Nachkomme mit einem bestimmten Attribut Attribute hatte, könnten Sie Folgendes tun:

//table[@name='important']/tr[.//*[@attr='value']]
8
Tony Wickham

Ich weiß, dass es eine späte Antwort ist, aber warum nicht umgekehrt? Alle <interestingtag/>-Tags finden und dann das übergeordnete <tr>-Tag auswählen.

//interestingtag/ancestor::tr
0
keocra