2012-04-23 80 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