我从Nokogiri节点获得了CSS类的名称。现在我想找到所有连接相同类的节点。
我不知道我要查找的元素包含哪个HTML标记,以及它有多深。我所知道的就是要搜索的课程。
我已经尝试过了:
doc.xpath("//*[contains(@class, #{css})]")
但这似乎回归了太多元素。
我也尝试过:
doc.xpath("//*[@class, #{css}]")
并且不返回任何内容。
我想获取包含该类的元素,而不是包含该类元素的每个元素。
Nokogiri可以这样做吗?
答案 0 :(得分:2)
正如我在评论中所说,.css()
或.search()
可以找到给定类的所有元素。
这是我刚才写的一个刮刀的例子。它找到页面上唯一的.content
div(at()
将仅选择第一个元素),然后查找其中的所有.col
div。然后它循环遍历它们并打印标题。
content = page.at('.content')
content.css('.col').each do |col|
puts col.at('h5').text
end
答案 1 :(得分:1)
假设班级名称存储在class_name
中,我认为
doc.xpath("//*[contains(concat(' ', normalize-space(@class), ' '), ' #{class_name} ')]")
是您正在寻找的。 p>
这会将包含class_name
的所有元素与其类匹配,即如果class_name
为“box”,则它将匹配div class="box"
等元素和{{1}等元素}}
如果您只想匹配div class="box left"
之类的元素,即只有一个类而且该类是您正在寻找的类,那么您可以使用它:
div class="box"