nokogiri排除了按类选择所有元素

时间:2011-08-18 05:53:30

标签: ruby 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 

我知道这不是写语法,但是无法找到如何选择元素类,而不是选择 by 类。

1 个答案:

答案 0 :(得分: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包含您要排除的任何内容)。