排除某些特定元素的xpath

时间:2019-11-15 09:43:45

标签: xpath

这是我要分析的页面HTML的简单版本:

<table class="class_1">
  <tbody>
    <tr class="class_2">
      <td class="class_3">&nbsp;</td>
      <td class="class_4">&nbsp;</td>
      <td class="class_5">&nbsp;</td>
    </tr>
    <tr class="class_2">
      <td class="class_3">&nbsp;</td>
      <td class="class_4">&nbsp;</td>
      <td class="class_5"><span class="class_6"></span>square</td>
    </tr>
    <tr class="class_2">
      <td class="class_3">&nbsp;</td>
      <td class="class_4">&nbsp;</td>
      <td class="class_5"><span class="class_7"></span>circle</td>
    </tr>
    <tr class="class_2">
      <td class="class_3">&nbsp;</td>
      <td class="class_4">&nbsp;</td>
      <td class="class_5"><span class="class_6"></span>triangle</td>
    </tr>
  </tbody>
</table>

您可以在以下位置找到该页面 https://sabbiobet.netsons.org/test.html

如果您尝试在Google表格中使用该功能,

= IMPORTXML(“ https://sabbiobet.netsons.org/test.html”;“ // td [@ class ='class_5']”)

我将获得:

    • 正方形
  • 圆圈
  • 三角形

我需要获取所有<td>减去class="class_5"&nbsp;的{​​{1}}。

换句话说,我只想获得这些值:

  • 平方
  • 三角形

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

以下XPath表达式

//td[@class='class_5' and span and not(span[@class='class_7'])]

选择所有td个元素,它们的属性class的值为class_5,有一个子元素span而没有一个子元素span,其中{ {1}}属性的值为class

请注意,您也可以使用

class_7

在这种情况下可以获得相同的结果。

答案 1 :(得分:1)

这应该有效:

//td[@class='class_5'][not(text()=' ')][not(./span[@class='class_7'])]

其中[not(text()=' ')]不是测试规则空间,而是测试带有Unicode代码U+00A0的符号,您可以在Windows中使用alt+0160在键盘上输入符号,其中数字将从小键盘。