2010-12-27 7 views
1

私の目標XHTMLドキュメント(簡体字)には、以下のようなものです:「ボリス」私はクラスの最後を選択しようとしているXPathで特定のクラスを持つ最後のXHTML <span>要素を選択するにはどうすればよいですか?

<html> 
<head> 
</head> 
<body> 
<span class="boris"> </span> 
<span class="boris"> </span> 
<span class="johnson"> </span> 
</body> 
</html> 

XPath式

//span[@class="boris"] 

は、クラスボリスのすべてのスパンを選択します。これらのうち最後のものを選択するにはどうすればよいですか?私はここにいるため、最後の()は動作しません

//span[@class="boris" and last()] 

を試してみた

は、文書全体の最後のスパンを指します。

ボラスクラスのすべてのスパンを選択するにはどうすればよいですか?

私は5つのまたは6のXPathのチュートリアルを読み、グーグルの多くを行って、私は一人でのXPathでこれを行うための方法を見つけることができません:(助けを事前に

感謝しました:)

+0

これはよくある質問です:** 'position()'は軸の方向に対して働き、デフォルトのaxは '子'です** –

答えて

0

ちょうどここで推測するが、それではない//span[@class="boris"][last()]

EDIT://span[@class="boris"[last()]]

EDIT 2:私はちょうどあなたにも巣述語が(hereを参照)、ので、多分あなたが行うことができました

いやが、動作しません。 。最初のものと一緒に行ってください。ちなみに、私はあなたのand last()をオンラインで試しました。あなたが望むことをしたようでした。ハァッ。

3
 
(//span[@class="boris"])[last()] 

last()を希望の動作にするには括弧が必要です。この:

<div> 
    <span class="boris">#1</span><!-- this one --> 
</div> 
<div> 
    <span class="boris">#2</span><!-- this one not --> 
    <span class="boris">#3</span><!-- but this --> 
</div> 
<div> 
    <span class="boris">#4</span><!-- and this, too --> 
    <span class="other">#5</span><!-- this not --> 
</div> 

最初の式が1つだけ選択します::それは、彼らがそれぞれの最後の-彼らのユニークな両親の範囲内であった場合<span class="boris">複数選択することになるので、

 
//span[@class="boris"][last()] 

が間違っている#4 。これはあなたが必要とするものです。

2番目の式は、図のように#1、#3、#4を選択します。


あなたの試み(//span[@class="boris" and last()]は)すべての<span class="boris">を選択するだろうが、あなたはそれが間違っていました主な理由:last()は数に評価されます。また、0以外の数値はブール値のコンテキストでtrueと評価されます。つまり、式は<span class="boris">の場合はfalseになることはありません。

あなたはブール値のための適切な比較を行う必要があります。何を意味することは、しかし、まだ間違っている

 
//span[@class="boris" and position() = last()] 

ました。これは#1と#3を選択します。なぜなら、position()last()の両方が親要素内に含まれているからです。

()を使用すると、新しい一時ノードセットが作成され、last()がそれに対応できます。

+0

+1は良い答えです。 – Flack

+0

輝かしい、Tomalakに感謝します。括弧を使って一時的なノードセットを作成することは、私がやりたいこととまったく同じです。これはStackOverflowに関する私の最初の質問です。私は本当に、質問に答えるために(含まれている)ユーザーの献身に感心しています。よくやった:)今私は私のC++の知識を使用して帰ってくる人を助けることができるかどうかを見極める。 – Fintan

+0

@Fintan:私は助けてくれると嬉しい。また、回答を受け入れたものとしてマークすることを忘れないでください。 :-) – Tomalak

関連する問題