如何在Internet上读取外部YAML文件并输出到XML

时间:2014-12-05 21:05:59

标签: ruby xml nokogiri yaml

我需要能够创建一个Ruby应用程序(如果可能的话没有Rails),打开一个外部YAML文件,其中包含超过104K行代码,从中读取并过滤掉以下三件事:

!ruby/object:EvtEvent
!ruby/object:NwsPost
!ruby/object:Asset

然后将这些内容输出到一个必须由Ruby程序构建的XML文件中。

  1. 我不清楚如何开始设置,因为我只是一名具有一年经验的初级开发人员。

  2. 虽然我在Stack Overflow上发现了一些关于使用Nokogiri的代码示例的代码片段,但我不确切知道在哪里放置这些代码,我必须根据我的情况进行修改:

    require 'yaml'
    require 'nokogiri'
    
    yaml = "getOrderDetails:
    Id: '114'
    Name: 'XYZ'"
    doc = YAML.load yaml
    
    output = Nokogiri::XML::Builder.new do |xml|
    xml.product{
    xml.id doc["getOrderDetails"]["Id"]
    xml.name doc["getOrderDetails"]["Name"]
    }
    end
    puts output.to_xml
    #=> <?xml version="1.0"?>
    #=> <product>
    #=> <id>114</id>
    #=> <name>XYZ</name>
    #=> </product>
    
  3. 如何编写init.rb文件以启动Ruby程序,该程序将打开有问题的YAML文件,从中读取,然后将其输出到XML?

  4. 我需要在我的lib文件夹中放置哪些其他Ruby文件来处理这个任务?

1 个答案:

答案 0 :(得分:-1)

  1. 代码可以放在方便的地方。 Ruby没有真正期望的文件位置;你只是运行它们。您的开发团队可能有指导方针,因此您需要与他们交谈。

  2. “init.rb”是文件的非描述性名称。尝试使用更能说明剧本目的的内容。

  3. 使用OpenURI

    可以轻松地为此目的阅读删除文件
    foo = open('http://domain.com/path/to/file.yaml').read
    

    将返回文件的内容并将其存储在变量foo中。

  4. 可以使用以下方法轻松解析YAML的内容:

    yaml = YAML.load(foo)
    

    此时haml将包含一个数组或一个哈希值,然后可以正常访问。

    更有趣的是,一旦加载了OpenURI,它将修补open方法,应该可以执行以下操作:

    require 'open-uri'
    yaml = YAML.load_file('http://domain.com/path/to/file.yaml')
    

    YAML必须打开一个要从磁盘加载的文件,这正是load_file通常所做的,并且在OpenURI发挥其魔力后,YAML类应继承该魔法。我没有测试过,但它应该可以工作。

  5. Nokogiri的Builder界面可能是个不错的选择。