web-dev-qa-db-ja.com

特定の子孫を含む要素を見つけるXpathクエリ

Html Agility Packを使用して、Webページでxpathクエリを実行しています。特定の興味深い要素を含むテーブルの行を見つけたいのですが。以下の例では、2番目の行をフェッチします。

<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>

私はこのようなことをしたいと思っています:

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

有効なxpath構文を除いて。 ;-)

興味深い要素自体を見つけて、返されたノードから親チェーンを上に向かって進むことができると思いますが、これを1つのステップで実行する方法があるはずであり、ただ密集しています。

35
Jeremy Stein

「interestintagという名前の子孫があります」は.//interestintag XPathでは、探している式は次のとおりです。

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

実際には、子ではなく子孫を探す必要があります。

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

これはOPが求めていたものではないことはわかっていますが、特定のattributeの子孫を持つ要素を見つけたい場合は、次のようにすることができます。

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

私はそれが遅い答えであることを知っていますが、なぜ逆にしないのですか?すべてを検索中<interestingtag/>タグを付けて、親を選択します<tr> 鬼ごっこ。

//interestingtag/ancestor::tr
0
keocra