用Ruby编写将数据写入XML文件的代码

36

我完全是 Ruby 的新手。我想做的只是生成一个简单的 XML 文件。

<?xml version="1.0" encoding="ASCII"?>
<product>
   <name>Test</name>
</product>

就是这样。


25
好的,你就拿着它保存到文件中吧 :P - CiscoIPPhone
我的意思是,使用对象模型。 - Phete
4个回答

67

建议您首先查看Builder:

require 'builder'

def product_xml
  xml = Builder::XmlMarkup.new( :indent => 2 )
  xml.instruct! :xml, :encoding => "ASCII"
  xml.product do |p|
    p.name "Test"
  end
end

puts product_xml

这将产生以下结果:

<?xml version="1.0" encoding="ASCII"?>
<product>
  <name>Test</name>
</product>

这看起来对我来说很合适。

一些Builder参考资料:


API文档链接似乎已经失效了(我想rubyforge.org本身已经不存在了?)。是否有可用的更新链接? - pioto
1
@pioto文档可在https://github.com/jimweirich/builder找到--我已提出修复原始帖子中的链接的编辑,但正在等待审核。 - David Tresner-Kirsch

24

只需使用Nokogiri::XML::Builder

require 'nokogiri'

builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
  xml.root {
    xml.products {
      xml.widget {
        xml.id_ "10"
        xml.name "Awesome widget"
      }
    }
  }
end
puts builder.to_xml

将输出:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <products>
    <widget>
      <id>10</id>
      <name>Awesome widget</name>
    </widget>
  </products>
</root>

2
这可能是我见过的Nokogiri最简单的例子。太棒了。 - FilBot3

9
您可以使用 builder 生成XML。

5
以下是关于在Ruby中构建XML的几种选项:

REXML - 内置但处理大型文档时非常缓慢

Nokogiri - 较新且速度更快,安装为rubygem

LibXML-Ruby - 基于C libxml库构建,也安装为rubygem

如果您无法安装rubygems,则REXML是最佳选择。 如果您将创建大型复杂的XML文档,则应使用Nokogiri或LibXML-Ruby。


1
所有这些都是用于解析现有的xml,你应该使用Builder来创建xml。 - ocodo
Nokogiri还有一个Builder - 不确定它是否更好,但如果你需要同时解析和写入XML,使用同一个库可能会更方便。 - froderik
Nokogiri的构建器似乎专注于块。它确实有效,但我发现Builder在以编程方式构建XML方面非常有帮助。 - PatrickWalker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接