问题 nokogiri多个css课程


如何选择一个有两个类的html元素?

例如,如何选择元素 <p> 下面是一个HTML文档(假设它有两个css类) class='class1 class2'

我试着使用以下内容:

  • doc.xpath("//p[@class~='class1 class2']")
  • doc.xpath("//p[@class~='class1']|[@class~='class2']")
  • doc.xpath("//p[@class~='class1',@class~='class2']")
  • doc.xpath("//p[contains(concat(' ', @class, ' '), ' class1 ') && contains(concat(' ',@class, ' '), ' class2 ')]")

但没有成功。

提前致谢


10566
2017-11-19 06:37


起源

尝试 //p[@class~='class1'][@class~='class2'], 也许。 - jtbandes


答案:


最后,我找到了使用nokogiri(libxml)搜索多个css类的正确方法:

doc.xpath('//p[contains(@class, "class1") and contains(@class, "class2")]')

它并不完美,因为如果 <p> 包含诸如的类 class10 和 class20 元素将被选中,但是现在它足以满足我的需要。如果您有更多建议,欢迎他们!

更新

以下是仅使用css解决此问题的更好方法:

doc.css('p.class1.class2')

感谢Aaron Patterson :-)


16
2017-11-19 18:15



对于其他人来说,当一个类只有数字(.2011)时,.css选择器不起作用。解析为css时,.2011是一个有效的类,你只需要这样做。\ 32 011 {}定义样式时。 - Abe Petrillo