2009-10-10 77 views
18

考慮兩種類型:Xpath:如何根據文本的非值屬性選擇一個選項?

<select name="garden"> 
    <option>Flowers</option> 
    <option selected="selected">Shrubs</option> 
    <option>Trees</option> 
    <option selected="selected">Bushes</option> 
    <option>Grass</option> 
    <option>Dirt</option> 
</select> 

@val爲實際指示value=""屬性?

@value用於指示innerText值嗎?

例如,如果<option>不包含任何value=""屬性會發生什麼情況。那麼你將如何選擇它?

select/option[@value = "Grass"] 

Xpath是否會自動忽略上述情況下的空格?是否應該修剪?

編輯:

選擇多個選項會變成這樣就夠了?

select/option[normalize-space(text())="Grass" or normalize-space(text())="Trees"] 

回答

24

要通過選擇文本值可以使用text()功能。並且規範化空間是必需的,因爲它們在默認情況下不會被刪除。下面是一個例子:

select/option[normalize-space(text())="Grass"] 

@value - 的 「value」 屬性

@val值 - 「VAL」 屬性

normalize-space()的值 - 函數返回參數串與空白通過汽提歸前緣和尾隨空白並用單個空格替換空白字符序列

+0

選擇多個選項,這會足夠嗎? select/option [normalize-space(text())=「Grass」或normalize-space(text())=「Trees」] – h34y

+0

是的,它會返回兩個節點 –

+0

沒關係,除了'text )'不是一個函數。這是一個節點測試。而Marc的答案既簡短又更習慣於XPath。 –

11

好吧,如果空白是不是一個問題:

/select/option[.='Grass'] 

我需要重新檢查的空白,雖然。你總是可以正常化:

/select/option[normalize-space(.)='Grass'] 
+0

用於選擇多個選項,這足夠嗎? 選擇/選項[正常化空間=「草」或標準化空間=「樹」()()] – h34y

+0

當然 - ,將工作 –

+0

這似乎是大小寫敏感的。有沒有辦法做到這一點,否則? – Tatarin

相關問題