通过特定条件,使用 XPath 获取在找到的元素之前的第一个元素

Getting the first element that precedes a found element, by a certain condition, with XPath

使用 import.io,给定以下代码片段,在成功提取 nametime 列后,如何提取最近的前一个 .heading 元素作为第三个元素使用 XPath 的列?

...

<div class="row-fluid">
    <div class="heading">HBO</div>
</div>
<div class="row-fluid">
    <div class="name">Silicon Valley</div>
    <div class="time">9pm</div>
</div>
<div class="row-fluid">
    <div class="name">The Wire</div>
    <div class="time">10pm</div>
</div>
...
<hr>

<div class="row-fluid">
    <div class="heading">ABC</div>
</div>
<div class="row-fluid">
    <div class="name">Lost</div>
    <div class="time">9pm</div>
</div>
<div class="row-fluid">
    <div class="name">Heroes</div>
    <div class="time">10pm</div>
</div>
...
<hr>

...

The nearest element that comes before the matched data with a class of "heading".

可以使用 XPath 中的 preceding 轴找到距给定元素最近的 preceding 元素。假设我们有表达式 div/div[class='name'][. = 'Heroes'],其中 select 是您示例中的姓氏,最接近的前一个是:

./preceding::div[@class = 'heading'][1]

其中 . 是一个真正的上下文节点,在这种情况下您可以删除 ./,或者应该将其替换为您已有的表达式的其余部分。

由于前轴向后计数,我们只需要找到第一个元素。注意 preceding axis 不 select 祖先节点或自身节点,从当前节点开始计算。