Ruby 如何使用正则表达式选择标记?

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,但大部分代码都是针对属性模式的,而我需要使用标记本身的模

我正在使用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,但大部分代码都是针对属性模式的,而我需要使用标记本身的模式获取元素。

使用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"]