我使用Ruby 2.4和Nokogiri。我有这个用于在我的页面上找到一个带有特定文本的元素......
a_elt = doc.at('a:contains("MY TEXT")')
如何使:包含不区分大小写?我不保证文本总是大写。
答案 0 :(得分:1)
根据CSS选择器规则,据我所知,这是不可能的。但XPath 2.0可以通过使用upper-case()
转换文本内容或使用matches()
使用第三个参数'i'
而不是contains()
来检查文本不区分大小写,这将与不区分大小写的正则表达式。 Nokogiri在内部将CSS选择器转换为XPath查询,因此您的示例变为//a[contains(., "MY TEXT")
。但是,Nokogiri的XML功能基于libxml2
(MRI Ruby)或javax.xml.xpath
(JRuby),它们不支持Xpath 2.0。
如果支持,则可以使用此XPath查询替换CSS选择器:
//a[contains(upper-case(.), "MY TEXT")]
但你可以直接在ruby中实现文本比较,如下所示:
a_elt = doc.xpath('//a').detect { |node| /MY TEXT/i === node.text }
答案 1 :(得分:0)
它不是很优雅,但它可以胜任:
require 'nokogiri'
doc = Nokogiri::XML(File.read("test.html"))
a_elt = doc.at("//a[
contains(
translate(
text(),
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'abcdefghijklmnopqrstuvwxyz'),
'my text')
]")
p a_elt.text
#=> "My TeXt Is WeIrD"