使用XPath查找元素

时间:2012-04-23 13:01:44

标签: 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表达式找到两个yes按钮:

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

但是我只想要第一个div的Yes按钮,如:

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

我如何找到它?

6 个答案:

答案 0 :(得分:2)

使用

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

这会选择其字符串值为button且其"Yes"属性的字符串值为type"button"元素)为其子元素的button div div的孩子,其div子项的字符串值为"Question1"

答案 1 :(得分:1)

您可以像这样定位第一个button(如果您不想将Question1硬编码到查询中):

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

另见MSDN XPath Examples

答案 2 :(得分:1)

使用您的代码段测试并为我工作:

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

答案 3 :(得分:0)

尝试// div / div [text()='Question1'] /按钮[text()='是']

答案 4 :(得分:0)

尝试这样的事情

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

答案 5 :(得分:0)

这应该可以解决问题:
//div[div[text()='Question1']]/div/button[text()='Yes']
OR
//div[div/text()='Question1']/div/button[text()='Yes']
这将选择具有text ='Yes'并且父级具有text ='Question1'的子div的按钮

如果您对第一个div感兴趣,无论文本如何,请使用:

//div[1]/div/button[text()='Yes']
更具体地说,你应该指定父母:
/div[1]/div/button[text()='Yes'] - 如果它是root(如您的示例中所示) //parentNode/div[1]/div/button[text()='Yes'] - 如果它是 parentNode