Ruby 如何使用正则表达式选择标记?
我正在使用Nokogiri解析XML文件。我需要获取标记名以模式开头,后跟数字id的元素 这是我的密码:Ruby 如何使用正则表达式选择标记?,ruby,xml,regex,xpath,nokogiri,Ruby,Xml,Regex,Xpath,Nokogiri,我正在使用Nokogiri解析XML文件。我需要获取标记名以模式开头,后跟数字id的元素 这是我的密码: doc.css('*').each do |e| if e.name =~ /ID_*/ puts e.name end end 结果是: ID_211850 ID_213811 ID_382621 ... 我想知道是否有更有效的方法使用CSS或XPath选择元素?我搜索了Google和Stack Overflow,但大部分代码都是针对属性模式的,而我需要使用标记本身的模
doc.css('*').each do |e|
if e.name =~ /ID_*/
puts e.name
end
end
结果是:
ID_211850
ID_213811
ID_382621
...
我想知道是否有更有效的方法使用CSS或XPath选择元素?我搜索了Google和Stack Overflow,但大部分代码都是针对属性模式的,而我需要使用标记本身的模式获取元素。使用XPath:
require 'nokogiri'
xml_string = <<HERE
<?xml version='1.0' encoding='UTF-8'?>
<root>
<ID_1>a</ID_1>
<ID_2>b</ID_2>
<ID_3>c</ID_3>
<ID_4>d</ID_4>
<XY_5>e</XY_5>
<XY_6>f</XY_6>
</root>
HERE
doc = Nokogiri.parse(xml_string)
p doc.xpath('.//*[starts-with(local-name(), "ID_")]').map(&:text)
# => ["a", "b", "c", "d"]
哼。。我错了……我想知道CSS选择器是否真的没有这样的能力……:)@在ArupRakshit中,我添加了一个
css
方法版本。但是我不确定name()
是否是标准的CSS选择器。非常感谢(+1)!!我现在应该停止搜索了……)但这也和我的一样。。我想,我把它删掉了earlier@ArupRakshit,()
这里有所不同。:)我仍在搜索name()
文档。感谢您提供css方法
p doc.css('*[name()^="ID_"]').map(&:text)
# => ["a", "b", "c", "d"]