2017-06-29 26 views
4

我有一個網頁,其中三個<input>元素都具有相同的name屬性。理想情況下,我想選擇這些元素中的第二個,除非有時頁面上只有一個元素,我想要選擇該元素。XPath選擇許多第二個元素,除非只有一個存在

我非常希望像

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

我想,也許只是它產生的三個因素,我可以做類似下面的(因爲max僞代碼不存在)

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

使用XPath完成此操作的最佳方法是什麼?

回答

2

也許抓住兩個,然後只有最後一個。

如果有兩個或更多,它會得到第二個。如果只有一個,它會抓住那個。

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

謝謝!這看起來應該起作用。我想我不明白我需要使用'position()'而不是'[1或2]'。我認爲一個整數被隱式視爲'position()= N' – Suever

+0

@Suever - 不客氣。此外,如果您能夠使用XPath 2.0並將序列傳遞給['max()'](https://www.w3.org/TR/2010/REC-xpath-functions-20101214/),那麼您的第一個XPath將起作用#func-max)...'(//輸入[@ name ='myname'])[max((1,last() - 1))]' –

+0

@Suever:整數N只被視爲()= N)當整個謂詞是一個整數。但在2.0中,你可以寫'[position()= 1 to 2]'。在1.0中,你可以寫'[position()< = 2]' –

相關問題