【问题标题】:How to create XML from Yaml file using Nokogiri?如何使用 Nokogiri 从 Yaml 文件创建 XML?
【发布时间】:2011-12-19 10:52:06
【问题描述】:

我想读取并打开一个 .yml 文件并使用 Nokogiri 创建一个 XML?谁能告诉我该怎么做?

这是 Yaml 格式:

getOrderDetails: 
  Id: '114'
  Name: 'XYZ' 

这是我需要的 XML:

<product> <id>123</id> <name>xyz</name> </product>

这是 ruby​​ 文件:

require 'nokogiri'
require 'rubygems'
require 'spec/spec_helper'
require 'yaml'

@doc = YAML.load(File.open(File.expand_path('/Workspace/XML_Parsing/getDetails_api.yml'‌​)))
@doc = File.open('/Workspace/XML_Parsing/getDetails_api.yml')
builder = Nokogiri::XML::Builder.new do |xml|
  xml.doc {
    @doc.each do |o|
      o.doc.child {
        puts "eval(#{doc(:getDetails(['Id']))})"
        puts "#{doc['NameCode']}"
        #o.OrderNo
        #o.EnterpriseCode
      }
    end
  }
end

puts builder.to_xml

【问题讨论】:

  • 信息不足:涵盖所有情况的(小而简洁的)YAML 示例以及为该示例生成的 XML 的外观。
  • 这是yaml格式产品:id:123 name:xyz 这是我需要的输出... 123xyz
  • 你能发布你到目前为止所尝试的吗?
  • edit您的问题添加更多详细信息。也会引起您的问题(不要只是为了解决问题!)此外,您可以在所需的等待期后添加赏金。点击阅读faq中的赏金。

标签: ruby xml nokogiri yaml


【解决方案1】:

如果您知道具体想要的字段:

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>

如果要根据 Yaml 键的名称创建任意 XML 文件:

output = Nokogiri::XML::Builder.new do |xml|
  xml.product{
    doc["getOrderDetails"].each do |name,value|
      xml.send(name.downcase,value)
    end
  }
end
puts output.to_xml
#=> <?xml version="1.0"?>
#=> <product>
#=>   <id>114</id>
#=>   <name>XYZ</name>
#=> </product>

【讨论】:

  • 不错的答案! (添加字符以允许评论。:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-29
  • 2012-02-26
  • 2015-11-09
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多