使用XPATH搜索包含空格的文本

13
<tr>
  <td class="f4 trimJustl"
      valign="middle"
      style="color:#ffffff;"
      artcolor="#ffffff">Create Network Container</td>
</tr>

我希望找到文本内容为Create Network Containertd元素。我创建了XPath。

//td[text()='Create Network Container']

但是它没有起作用。我也尝试过。

//td[contains(text(),'Create Network Container')]

但这对我也没有用。


我尝试使用 //td[contains(text(),'Network')] 这个方法,它可以工作。但是我想使用文本中的所有三个单词,即“创建网络容器”。 - user3766763
如果你正在使用的HTML标记与此处发布的完全相同,则你的XPath应该匹配那个<td>元素。 - har07
2个回答

33

它的工作原理是通过剪切和粘贴 您发布的示例。您的原始来源可能有制表符或其他不匹配的空白字符。以下是一些替代方案:

1)标准化空格

//td[normalize-space(text()) = 'Create Network Container']

2) 使用 td 的字符串值进行比较(这也将匹配Create <b>Network</b> Container

//td[normalize-space(.) = 'Create Network Container']

3) 每个单词都要单独检查(不考虑单词顺序)

//td[contains(text(), 'Create') and contains(text(), 'Network') and contains(text(), 'Container')]

4) 去除空格、制表符、换行符、回车和比较结果:

//td[translate(text(), "  &#13;&#10;&#09;&#xa;", "") = 'CreateNetworkContainer']

+1 票。我正在处理一个使用“contains”的xpath,当我有一个连字符时,它无法在屏幕上找到文本。normalize-space帮了我一个大忙!谢谢! - IamBatman

1
尝试 this
//td[matches(text(), '\s*Create\s+Network\s+Container\s*')]

坦白地说,我在多个我检查的解释器中都能够使用它:
 //td[text() = 'Create Network Container']

上一次尝试是匹配所有可能存在的空格字符(也许不只是一个空格符),这就是为什么最简单的解决方案不能给您正确结果的原因。

2
Firepath本身不会评估此xpath。它会给出无效的xpath错误。 - user3766763
我修复了最初的查询。如果您使用xpath 2.0,它可以正常工作。在这里进行了测试:http://videlibri.sourceforge.net/cgi-bin/xidelcgi - mareckmareck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接