Hi,

On Thu, 19 Aug 2004 12:36:51 +0900, Nicholas Van Weerdenburg
<nick / activehitconsulting.com> wrote:
> Are there any libraries that handle YAML->XML conversion? I want to use
> in-line YAML to allow command-line insertion of XML fragments into a
> document.
> 
> e.g. addxml.rb --entry "config : {name : url, value : www.blah.com }"
> 
> would enter:
> <config>
>     <name>url</name>
>     <value>www.blah.com</value>
> </config>

Just a proof-of-concept thing (not insertion but dumping.)

% cat xmlgenerator.rb
require 'soap/marshal'

class XMLGenerator < SOAP::SOAPGenerator
  def obj_to_xml(obj)
    soap = SOAP::Mapping.obj2soap(obj)
    soap.elename = XSD::QName.new(nil, soap.type.name)
    convert_to_xml(soap)
  end

  def hash_to_xml(hash, name)
    soap = SOAP::SOAPElement.from_obj(hash)
    soap.elename = XSD::QName.new(nil, name)
    convert_to_xml(soap)
  end

private

  def convert_to_xml(soap)
    @generate_explicit_type = false
    ns = XSD::NS.new
    @buf = ''
    @indent = ''
    encode_data(ns, true, soap, nil)
    @buf
  end
end

generator = XMLGenerator.new

class Config
  def initialize(name, value)
    @name = name
    @value = value
  end
end

obj1 = Config.new("url", "www.blah.com")
puts generator.obj_to_xml(obj1)

require 'yaml'
obj2 = YAML.load("config : {name : url, value : www.blah.com }")
puts generator.hash_to_xml(obj2, 'root')

% ruby xmlgenerator.rb

<Config>
  <name>url</name>
  <value>www.blah.com</value>
</Config>

<root>
  <config>
    <name>url</name>
    <value>www.blah.com</value>
  </config>
</root>

Regards,
// NaHi