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