2017-06-29 8 views
4

私はという属性を持つ3つの<input>要素を持つWebページを持っています。理想的には、ページ上に1つの要素しかない場合を除いて、これらの要素の2番目を選択したいと思います。その要素を代わりに選択したいと思います。XPathは1つだけ存在しない限り多くの第2要素を選択します

理想的には私は私はそれがすべての3つの要素を生成する以外、多分私は、次のような何かを行うことができると考え

(//input[@name='myname'])[max(1, last()-1)] 

(存在しないmax以来の擬似コード)のような何かをしたいと思い

(//input[@name='myname'])[last()-1 or 1] 

XPathを使用してこれを達成する最良の方法は何ですか?

答えて

2

両方を取得し、最後のものだけを取得することがあります。

2つ以上ある場合は、2つ目の値を取得します。唯一のものがあれば、そのものをつかむ。

((//input[@name='myname'])[position()=1 or position()=2])[last()] 
+0

ありがとうございます!これはうまくいくように見えます。私はちょうど '[1または2]ではなく' position() 'を使う必要があることを理解していなかったと思います。私は整数が 'position()= N'として暗黙的に扱われたと考えました – Suever

+0

@Suever - あなたは大歓迎です。また、XPath 2.0を使用してシーケンスを['max()']に渡すと、最初のXPathが動作します(https://www.w3.org/TR/2010/REC-xpath-functions-20101214/ –

+0

@Suever:整数Nは、(position(n)= 'myname')のように扱われます。 ()= N)となる。しかし、2.0では '[position()= 1 to 2]'と書くことができます。 1.0では '[position()< = 2]'と書くことができます。 –

関連する問題