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



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

或:

p doc.css('*[name()^="ID_"]').map(&:text)
# => ["a", "b", "c", "d"]

相关内容

  • 没有找到相关文章

最新更新