Большинство парсеров XML / HTML в Ruby в наши дни используют Nokogiri, поэтому я рекомендую этот парсер. Тем не менее, Hpricot и Nokogiri поддерживают XPath и CSS, поэтому они довольно взаимозаменяемы.
Я бы пошел по этому пути:
html = <<EOT
<ul class="filtering_new" width="50%">
<li class="filter">1</li>
<li class="filter">2</li>
<script>Alert('1');</script>
<li class="filter">3</li>
</ul>
EOT
require 'nokogiri'
doc = Nokogiri::HTML(html)
li = doc.search('//li[@class="filter"]').select{ |n| n.text.to_i == 3 }
li # => [#<Nokogiri::XML::Element:0x8053fc84 name="li" attributes=[#<Nokogiri::XML::Attr:0x8053fb6c name="class" value="filter">] children=[#<Nokogiri::XML::Text:0x80546f98 "3">]>]
Это находит подходящие узлы, затем возвращает их как NodeSet для повторения, где они выбираются / отклоняются на основе текста узла.
li = doc.search('//li[text() = "3"]')
li # => [#<Nokogiri::XML::Element:0x8053fc84 name="li" attributes=[#<Nokogiri::XML::Attr:0x8053fb6c name="class" value="filter">] children=[#<Nokogiri::XML::Text:0x80546f98 "3">]>]
Это значительно облегчает сравнение с базовой библиотекой libXML, где она работает намного быстрее.