5

私はxpathを持っています

page.search("//table[@class='campaign']//table")

2 つのテーブルを返します。

最初のテーブルのみを選択する必要があります。この行は機能しません:

page.search("//table[@class='campaign']//table[1]")

最初のテーブルのみを選択するには?

4

2 に答える 2

7

これも私を悩ませました。なぜあなたのソリューションが機能しないのか、まだ正確にはわかりません。ただし、これは次のようにする必要があります。

page.search("//table[@class='campaign']/descendant::table[1]")

編集ドキュメントが言うように、

「ロケーション パス//para[1]は、ロケーション パスと同じ意味ではありません/descendant::para[1]。後者は最初の子孫パラ要素を選択します。前者は、親の最初のパラ子であるすべての子孫パラ要素を選択します。」

あなたの質問のおかげで、なぜこれがこのように機能するのかがようやくわかりました:)。したがって、構造とニーズに応じて、これは機能するはずです。

于 2012-04-05T19:17:18.313 に答える
2

最初に一致する要素を選択するために XPath 式を使用する代わりに、それらすべてを見つけてから切り詰めることができます。

first_table = page.search("//table[@class='campaign']//table").first

...またはさらに良いことに、次を使用して最初のものだけを選択しますat

first_table = page.at("//table[@class='campaign']//table")

CSS セレクター構文を使用すると、式をより簡単に見つけることができることにも注意してください。

first_table = page.at("table.campaign table")
于 2012-07-25T22:12:23.283 に答える