Метод 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
Пересечение - это простой способ проверить, есть ли у двух массивов какие-либо общие элементы (т. е. classes
содержит все, что вы хотите исключить).