Nokogiri多个CSS类

13
怎么选择有两个类的html元素?
例如,如何在HTML文档中选择下面的<p>元素(假设它有两个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 ')]")
但都没有成功。
谢谢。

尝试使用 //p[@class~='class1'][@class~='class2'] - jtbandes
1个回答

28

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

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

这不是完美的,因为如果<p>包含例如class10class20这样的类,该元素将被选择,但是对我现在的需求已经足够了。如果你有更多建议,欢迎提出!

更新

这里是一个更好的仅使用CSS解决这个问题的方法:

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

感谢Aaron Patterson的贡献 :-)


2
仅供他人参考,当一个类只包含数字(.2011)时,.css选择器无法正常工作。.2011是CSS解析时的有效类,您只需要在定义样式时使用.\32 011 {}即可。 - Abe Petrillo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接