2011-02-11 2 views
3

lxmlでは、xpathを使用して、テーブルの中のtrをすべて選択しています。 。最後の2つのtrを除くすべてのtrを選択するには

最後の2つの行を除外するパターンマッチングはありますか?私はxpathのチュートリアルを見ていたのですが、明らかに "例外"演算子と "last()"がありますが、私のコードがうまく動作していないようです。

これまでのところ私はこれを持っています。このパターンに最後の2行を除外するために追加するものは何ですか?主な問題は、変化するtrの数です。

result = doc.xpath("//tr") 

私は、リストにこれを回し、ちょうど最後の2つの要素を取り除くことができると思いますが、任意の容易な/エレガントな解決策はありますか?

ありがとうございます!

+0

良い質問、+1。必要なすべての 'tr'要素を選択する純粋なXPathソリューション(1つの単一行式)については私の答えを見てください。 :) –

答えて

2
result = doc.xpath("//tr")[0:-2] 

このトリックを行う必要があります。

+0

作品、ありがとう!私のコードをたくさん短縮しました。 – chesspro

9

使用expressionSelectingTheTable質問が

この単一のXPath式(例えば//table[@id='foo']として)求められているされているテーブルを選択し、特定のXPath式で置換されていなければならない

expressionSelectingTheTable/tr[not(position() > last() -2)] 

table親のすべてのtr子を選択します。その位置は、最後の2つのうちの1つではありません。

+0

興味深いことに、あなたがposition()> last()を実行できるかどうかは分かりませんでした。あなたはどちらか一方しか持てないと思った。ありがとう! – chesspro

+2

@chesspro:実際は '(position()> last()-2)'ではなく、 'position()'と 'last()'関数は*任意の* XPath式に参加できます。 'not(position()= last())のような式は非常に頻繁に使われます。 –

+1

+1良い答え。 –

関連する問題