XPath无法使用text()定位元素

时间:2014-04-09 09:35:24

标签: text 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')]

但它不起作用。

请指教!

谢谢! :)

1 个答案:

答案 0 :(得分:2)

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

您的尝试

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

无效,因为

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

两个文本节点:一个空的文本节点,只包含换行符,就在input之前,而非空的一个在<input>之后。我上面用方括号概述了它们。

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

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