2012-04-23 79 views
1

元素我有下面的標記:查找使用XPath

<div> 
<div>Question1</div> 
<div> 
    <button type="button">No</button> 
    <button type="button">Yes</button> 
</div> 
</div> 

<div> 
<div>Question2</div> 
<div> 
    <button type="button">No</button> 
    <button type="button">Yes</button> 
</div> 
</div> 

以下XPath表達式位於2個是按鈕:

//div/div/button[text()='Yes'] 

但我只想要第一個div的Yes按鈕,如下所示:

//div/div[text()='Question1'] 

我該如何找到它?

回答

2

使用

//div[div[. = 'Question1']] 
    /div/button[@type = 'button'][. = 'Yes'] 

這將選擇任何button,其字符串值是"Yes",其type屬性具有字符串值"button"和( button元素)是div的子元素,它是div的子元素,它具有div子字符串值爲"Question1"

+0

謝謝,它的作品:) – Imreking 2012-04-23 13:45:42

+0

@ImrePetroczki:不客氣。 – 2012-04-23 14:22:57

0

嘗試// DIV/DIV [文本()= '問題1'] /按鈕[文本()= '是']

0

嘗試是這樣的

/x:html/x:body/x:div[1]/x:div[2]/x:button[2] 
0

這應該做的伎倆:
//div[div[text()='Question1']]/div/button[text()='Yes']
OR
//div[div/text()='Question1']/div/button[text()='Yes']
這種選擇具有文本=「是」,並具有有一個孩子的div文字父=「問題1」

按鈕0

此外,如果你有興趣的第一個div無論是文本,使用:

//div[1]/div/button[text()='Yes']
和更具體的,你應該指定父:
/div[1]/div/button[text()='Yes'] - 如果它的根目錄(如你的例子) //parentNode/div[1]/div/button[text()='Yes'] - 如果它是parentNode

+0

''Question1「'文本位於前面的兄弟'div'中,而不是''button'的父'div'。 – MattH 2012-04-23 13:13:51

+0

@MattH true,通過編輯進行糾正。 – 2012-04-24 06:38:15

1

您可以針對第一button像這樣(如果你不想硬編碼Question1到你的查詢):

(//div/div/button[text() = 'Yes'])[1] 

另請參閱MSDN XPath Examples

+0

+1是迄今唯一正確的答案。 – 2012-04-23 13:19:50

+0

這個xpath表達式找到了正確的yes按鈕,但是我不能建立在div的順序上,所以我必須以某種方式硬編碼'Question1'。 – Imreking 2012-04-23 13:27:10

+0

@ImrePetroczki在這種情況下,你的問題有點誤導,其他一些答案將成爲你所需要的。 – Filburt 2012-04-23 13:37:56

1

測試,我與你的代碼段的工作:

//div/div[preceding-sibling::*[position() = 1][.="Question1"]]/button[.="Yes"] 
+0

謝謝,它的作品太:) :) – Imreking 2012-04-23 13:45:52