Xpath 2.0 - xmlXPathCompOpEval:找不到匹配的函数

Sev*_*rin 4 ruby xpath ruby-on-rails mechanize nokogiri

我在我的Rails项目中运行Xpath 2.0并尝试使用matches()它提供的功能,如下所示:

page = Mechanize.new.get('http://www.example.com').parser
page.search("//a[matches(text(),'lagerfordon','i')]").first.text
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误:

RuntimeError: xmlXPathCompOpEval: function matches not found
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

mat*_*att 5

Nokogiri(建立在Mechanize上)使用支持XPath 1.0的libxml,但不支持XPath 2.0,因此没有matches可用的功能.

您可以使用以下contains函数执行区分大小写的匹配:

//a[contains(text(),'lagerfordon')]
Run Code Online (Sandbox Code Playgroud)

为了进行不区分大小写的匹配,或者使用更复杂的正则表达式,您需要从Ruby中的Mechanize过滤结果,或者创建自定义XPath函数.