使用XPath获取在某个条件下找到的元素之前的第一个元素

时间:2015-09-07 20:23:38

标签: xpath screen-scraping import.io

使用import.io,给定以下代码段,在成功提取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>

...

1 个答案:

答案 0 :(得分:1)

  

匹配数据之前的最近元素&#34;标题&#34;。

可以在XPath中使用preceding轴找到给定元素中最近的前面的元素。假设我们有表达式div/div[class='name'][. = 'Heroes'],它选择示例中的姓氏,最接近的前一个名称为:

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

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

由于前一轴向后计数,我们只想找到第一个元素。请注意,前一轴不会选择祖先或自身节点,从当前节点开始计算。