2011-08-18 43 views
0

我只是想通過類與選擇的節點引入nokogiri排除中選擇元素,全部由

page.css('div.parent > *').each do |child| 
    if (child["class"].content != 'this' && child["class"].content != 'that') 
    array.push(child.text.to_s) 
    end 
end 

我知道這不是寫語法的所有孩子的排除幾個子元素,但一直未能找到如何選擇元素類,而不是選擇類。

回答

1

css方法爲您提供Nokogiri::XML::Element實例,那些實例和他們的大部分行爲都從它們的Nokogiri::XML::Node父類中獲得。爲了擺脫一個節點的屬性,使用[]

page.css('div.parent > *').each do |child| 
    if(!%w{this that}.include?(child['class'])) 
    array.push(child.text.to_s) 
    end 
end 

你也可以使用if(child['class'] != 'this' && child['class'] != 'that')如果這更有意義給你。

然而,class屬性可以有多個值,所以你可能想將它們分割成塊的空白:

exclude = %w{this that} 
page.css('div.parent > *').each do |child| 
    classes = (child['class'] || '').split(/\s+/) 
    if((classes & exclude).length > 0) 
    array.push(child.text.to_s) 
    end 
end 

intersection是隻是爲了看看這兩個數組有任何共同的元素(一種簡單的方法即classes包含任何你想排除)。

+0

謝謝畝,這就是我以後。你忘記關閉第二行的if if –

+0

@Aaron:謝謝,添加了缺失的括號。 –

+0

啊,感謝第二塊,這可能會更強大一點。 –