nokogiri несколько классов CSS - PullRequest
11 голосов
/ 19 ноября 2009

Как можно выбрать элемент 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 ')]")

но безуспешно.

Заранее спасибо

1 Ответ

18 голосов
/ 19 ноября 2009

Наконец я нашел ПРАВИЛЬНЫЙ способ поиска нескольких классов CSS с помощью nokogiri (libxml):

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

Это не идеально, потому что если <p> содержит классы, такие как class10 и class20, элемент будет выбран, но пока этого достаточно для того, что мне нужно. Если у вас есть больше предложений, они приветствуются!

Обновление

Вот лучшее решение этой проблемы с использованием только CSS:

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

Спасибо Аарону Паттерсону: -)

...