【问题标题】:Getting the first element that precedes a found element, by a certain condition, with XPath使用 XPath 根据特定条件获取找到的元素之前的第一个元素
【发布时间】:2015-12-03 10:01:57
【问题描述】:

使用 import.io,给定以下 sn-p,在成功提取 nametime 列之后,如何使用 XPath 提取最近的前面 .heading 元素作为第三列?

...

<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>

...

【问题讨论】:

  • 最近的前面或后面的.heading元素?
  • @stribizhev 在匹配数据之前的最近元素,具有“标题”类。
  • 我删除了你的正则表达式(希望你能原谅我的坦率)。 Never ever use regular expressions to process (X)HTML。此外,即使它有一个答案,它也会涉及更适合不同问题的相互冲突的主题。
  • 试试//div/div[@class='name']/parent::div/preceding-sibling::div/div[@class='heading']/text()。在xpathtester.com/xpath 测试。请检查。
  • 我刚要发帖./parent::div/preceding-sibling::div/div[@class='heading‌​']/text(),但我猜你有一个更广泛的答案。

标签: xpath screen-scraping import.io


【解决方案1】:

在匹配数据之前的最近元素,具有“标题”类。

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

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

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

由于前面的轴倒数,我们只希望找到第一个元素。请注意,前面的轴不选择祖先或自身节点,从当前节点开始计数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多