2014-04-09 45 views
1

下面的代码:的XPath无法找到使用元素文本()

<label> 
<input class="class1" type="checkbox" checked="checked"/> 
       First text    
</label> 
<label> 
<input class="class2" type="checkbox" checked="checked"/> 
       Second text    
</label> 
<label> 
<input class="class3" type="checkbox" checked="checked"/> 
       Third text    
</label> 

我想要做的是包含文本获得特定的标签元素。我尝试:

//label[text()='First text'] 

//label[contains(text(),'First text')] 

,但它不工作。

请指教!

谢谢! :)

回答

2
 
//label[text()[contains(., 'First text')]] 

你尝试

 
//label[contains(text(),'First text')] 

不起作用,因为<label>

<label>[ 
]<input class="class1" type="checkbox" checked="checked"/>[ 
       First text    
]</label> 

有文本节点:包含只是一个线空单休息,在input之前,并且在之后非空e <input>。我已经用上面的方括号概述了它们。

  • contains(node-set, string)这样的调用强制将第一个参数转换为contains为字符串。
  • 将节点集转换为字符串将为您提供第一个节点的文本内容。 (试一试,string(label)会给你'First text'一堆空白,无论有多少标签。)
  • 而你的情况,这是空的文本节点,所以contains(text(),'First text')将永远不会成功。

因此,您必须单独测试文本节点,并且通过嵌套谓词来完成,如上所示。

+0

太棒了!谢谢! :) – niemeczek