2015-06-16 26 views
0

我從Nokogiri節點獲得了CSS類的名稱。現在我想查找所有同樣具有相同類的節點。在Nokogiri nodeset中按類講授

我不知道我要找的元素是哪個HTML標籤,它有多深。我所知道的是尋找什麼課程。

我已經嘗試:

doc.xpath("//*[contains(@class, #{css})]") 

但這似乎回到了太多的元素。

此外,我曾嘗試:

doc.xpath("//*[@class, #{css}]") 

,這沒有返回。

我想獲取包含該類的元素,而不是每個包含該類元素的元素。

是否可以與Nokogiri做到這一點?

+0

我沒有用引入nokogiri了一段時間,但不會doc.css(「我的-class')或doc.search('my-class')做你想做的事情? Nokogiri可以很好地與CSS選擇器配合使用,您只需要使用XPath進行高級匹配。 – Jimeux

回答

1

假設類名被存儲到class_name,我認爲

doc.xpath("//*[contains(concat(' ', normalize-space(@class), ' '), ' #{class_name} ')]") 

是你在找什麼。

這將所有包含class_name到他們班的元素,也就是說,如果class_name是「盒子」,那麼它就會像div class="box"這兩個元素的元素,如div class="box left"

匹配。如果你只想匹配像div class="box"元素匹配即只有一個階級和階級就是你要找的人,那麼你可以使用這個:

doc.xpath("//*[@class=\"#{class_name}\"]") 
+0

doc.xpath(「// * [@ class = \」#{class_name} \「]」)正是我所需要的,謝謝! – user2926430

2

正如我在我的評論中所說的,.css().search()可以找到給定類的所有元素。

下面是我剛纔寫的一個刮板的例子。它發現頁面上唯一的.content div(at()將僅選擇第一個元素),然後在其中找到所有.col div。然後循環遍歷它們並打印標題。

content = page.at('.content') 
content.css('.col').each do |col| 
    puts col.at('h5').text 
end