不区分大小写的XPath与自定义函数匹配

时间:2014-12-10 10:29:38

标签: ruby-on-rails ruby xpath mechanize

由于XPath支持自定义函数,因此我创建了一个自定义函数,以便可以匹配不区分大小写:

class XpathFunctions

  def case_insensitive_equals node_set, str_to_match
    node_set.find_all do |node|
      node.to_s.downcase == str_to_match.to_s.downcase
    end
  end

 end

然而,使用此页面进行测试会返回以下结果:

agent = Mechanize.new
page = agent.get('http://www.angelettiauto.it/parcoveicoli.php').parser
page.xpath("//*[case_insensitive_equals(text(),'Audi')]", XpathFunctions.new).count
# => 1

预期结果为4,因为页面上列出了4个Audis,我需要全部。

这是因为使用完全匹配而非contains()造成的,但我无法确定将其注入的位置。

1 个答案:

答案 0 :(得分:0)

这可以通过修改case_insensitive_equals方法来实现,如下所示:

def case_insensitive_equals node_set, str_to_match
  node_set.find_all do |node|
    node.to_s.downcase.include?(str_to_match.downcase)
  end
end