繁体   English   中英

如何使用rails Nokogiri gem获取2个div之间的所有html数据

[英]How to get all html data between 2 div with rails Nokogiri gem

我想尝试使用 Nokogiri gem 获取 2 div 之间的所有 html 数据:

前任:

<div class='job-details__divider'></div>
<h2 class='job-details__second-title'>...</h2>
<div class='job-details__top-reason-to-join-us'>
...
</div>
<h2 class='job-details__second-title'>...</h2>
<div class='job-details__paragraph'>
...
</div>
<h2 class='job-details__second-title'>...</h2>
<div class='job-details__paragraph'>
...
</div>
<h2 class='job-details__second-title'>...</h2>
<div class='job-details__paragraph'>
...
</div>
<div class='jd-page__employer-overview'></div>

结果数据是 2 个类之间的 html 代码(job-details__divider 和 jd-page__employer-overview) 任何人都可以给我一个解决方案? 谢谢!

这可以通过应用节点集交集的Kayessian 方法使用 Nokogiri 的 XPATH 1.0 支持来实现:

$nodeset1[count(. | $nodeset2) = count($nodeset2)]

在您的情况下, $nodeset1div[@class='jd-page__employer-overview'] $nodeset2的所有兄弟姐妹,而$nodeset2div[@class='job-details__divider']所有兄弟姐妹。

doc = Nokogiri::HTML.parse(html)

# nodeset1: All nodes after div.jd-page__employer-overview
nodeset1 = "//div[@class='jd-page__employer-overview']/preceding::node()"

# nodeset2: All nodes following div.job-details__divider
nodeset2 = "//div[@class='job-details__divider']/following::node()"

intersection = doc.xpath("#{nodeset1}[count( . | #{nodeset2}) = count(#{nodeset2})]")

puts intersection.to_html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM