如何使用与Nokogiri gem一样的Ox gem打开,解析和处理XML文件?

Bob*_*Bob 3 ruby xml ruby-on-rails nokogiri

我想打开一个外部XML文件,解析它并使用数据存储在我的数据库中.我用Nokogiri很容易做到这一点:

file = '...external.xml'
xml = Nokogiri::XML(open(file))

xml.xpath('//Element').each do |element|
  # process elements and save to Database e.g.:
  @data = Model.new(:attr => element.at('foo').text)
  @data.save      
end
Run Code Online (Sandbox Code Playgroud)

现在我想尝试(也许更快)Ox gem(https://github.com/ohler55/ox) - 但我不知道如何从纪录片中打开和处理文件.

上面代码的任何等效代码示例都很棒!谢谢!

Jac*_*own 8

您不能使用XPath来定位Ox中的节点,但Ox确实提供了一种locate方法.您可以像这样使用它:

xml = Ox.parse(%Q{
  <root>
    <Element>
      <foo>ex1</foo>
    </Element>
    <Element>
      <foo>ex2</foo>
    </Element>
  </root>
}.strip)

xml.locate('Element/foo/^Text').each do |t|
  @data = Model.new(:attr => t)
  @data.save      
end

# or if you need to do other stuff with the element first
xml.locate('Element').each do |elem|
  # do stuff
  @data = Model.new(:attr => elem.locate('foo/^Text').first)
  @data.save      
end    
Run Code Online (Sandbox Code Playgroud)

如果您的查询找不到任何匹配项,它将返回一个空数组.有关locate查询参数的简短说明,请参阅element.rb上的源代码.