你如何通过 xpath select 两个不同的标签,都在不同的级别,其中一个是可选的

How do you select two different tags via xpath, both at different levels, when one of them is optional

我遇到的情况是同一页面上混合了这些格式的数据。换句话说,一些行将显示为:

some lengthy XPATH_X uptill here:
<td/>
<td>
   I Need this element td
</td>
<td/>
<td/>
<td/>
<td/>

其他几行将以这种格式显示:

the same lengthy XPATH_X uptill here:
<td/>
<td>
    <span>
        I Need this element span
    </span>
</td>
<td/>
<td/>
<td/>
<td/>

请注意,每个 td 标签没有不同的属性。在这两种情况下,我都需要 select 第二行 (td)。

我正在尝试使用以下 xpath 捕获这两个元素:

XPATH_X/*[self::td[position()=2] or self::td[position()=2]/span]

我在页面上试过了,但出于某种原因它没有 select 任何东西。

有人可以帮我解决这个问题吗?我已经为此花费了 2 个多小时。

您应该尝试 XPATH_X/td[2]//text() 检索文本,无论它是在 td 的根部还是在子标签中

你可以测试一下here;在此测试中,我检索了三个结果:

  • td
  • span中的文本
  • td
  • 根部的文本
  • td 的根部和封闭的 span 内的文本(如果这对您不起作用,则应仅检索 td 的文本如果没有 span,则使用 XPATH_X/td[position()=2 and not(./span)]/text() | XPATH_X/td[2]/span/text()

要检索包含文本节点的元素而不是文本节点本身,您可以使用以下命令:

XPATH_X/td[2]//self::node()[text()]