我有一個xml文件。我怎麼能從該文件中生成xml_builder ruby代碼?如何從XML文件生成xml_builder ruby代碼
注意 - 我在這裏倒退了一些(而不是生成xml,我正在生成ruby代碼)。
漂亮的格式化並不是什麼大問題 - 我可以隨時通過格式化程序運行它。
我有一個xml文件。我怎麼能從該文件中生成xml_builder ruby代碼?如何從XML文件生成xml_builder ruby代碼
注意 - 我在這裏倒退了一些(而不是生成xml,我正在生成ruby代碼)。
漂亮的格式化並不是什麼大問題 - 我可以隨時通過格式化程序運行它。
這裏就是我最終想出了:
#!/usr/bin/env ruby
require "rexml/document"
filename = ARGV[0]
if filename
f = File.read(filename)
else
raise "Couldn't read file: `#{filename}'"
end
doc = REXML::Document.new(f)
def self.output_hash(attributes={})
count = attributes.size
str = ""
index = 0
attributes.each do |key, value|
if index == 0
str << " "
end
str << "#{key.inspect} => "
str << "#{value.inspect}"
if index + 1 < count
str << ", "
end
index += 1
end
str
end
def self.make_xml_builder(doc, str = "")
doc.each do |element|
if element.respond_to?(:name)
str << "xml.#{element.name}"
str << "#{output_hash(element.attributes)}"
if element.length > 0
str << " do \n"
make_xml_builder(element, str)
str << "end\n"
else
str << "\n"
end
elsif element.class == REXML::Text
string = element.to_s
string.gsub!("\n", "")
string.gsub!("\t", "")
if !string.empty?
str << "xml.text!(#{string.inspect})\n"
end
end
end
str
end
puts make_xml_builder(doc)
生成後,我再格式化它在Emacs。
這有點不可能,沒有什麼不同,如果你問 「如何生成Ruby腳本輸出數量3
」 的答案可能是:
puts 3
或
puts 2+1
或
puts [1,2,3].count
等
所以,一個回答你的問題是:
xml = File.read('your.xml')
puts "puts <<EOF\n#{xml}\nEOF"
無論如何,如果你只是想生成基於生成器腳本,剛生成的XML節點的節點,我想這將使用XSLT是最簡單的。這是一種完全爲此目的構建的語言 - 轉換XML。