特定の子孫を含む要素を見つける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つのステップで実行する方法があるはずであり、ただ密集しています。
「interestintagという名前の子孫があります」は.//interestintag
XPathでは、探している式は次のとおりです。
//table[@name='important']/tr[.//interestingtag]
実際には、子ではなく子孫を探す必要があります。
//table[@name='important']/tr[descendant::interestingtag]
これはOPが求めていたものではないことはわかっていますが、特定のattributeの子孫を持つ要素を見つけたい場合は、次のようにすることができます。
//table[@name='important']/tr[.//*[@attr='value']]
私はそれが遅い答えであることを知っていますが、なぜ逆にしないのですか?すべてを検索中<interestingtag/>
タグを付けて、親を選択します<tr>
鬼ごっこ。
//interestingtag/ancestor::tr