Returns a string containing an XML representation of its receiver:
{ foo: 1, bar: 2 }.to_xml
# =>
# <?xml version="1.0" encoding="UTF-8"?>
# <hash>
# <foo type="integer">1</foo>
# <bar type="integer">2</bar>
# </hash>
To do so, the method loops over the pairs and builds nodes that depend on
the values. Given a pair key, value:
-
If
valueis a hash there's a recursive call withkeyas:root. -
If
valueis an array there's a recursive call withkeyas:root, andkeysingularized as:children. -
If
valueis a callable object it must expect one or two arguments. Depending on the arity, the callable is invoked with theoptionshash as first argument withkeyas:root, andkeysingularized as second argument. The callable can add nodes by usingoptions[:builder].'foo'.to_xml(lambda { |options, key| options[:builder].b(key) }) # => "<b>foo</b>" -
If
valueresponds toto_xmlthe method is invoked withkeyas:root.class Foo def to_xml(options) options[:builder].bar 'fooing!' end end { foo: Foo.new }.to_xml(skip_instruct: true) # => # <hash> # <bar>fooing!</bar> # </hash> -
Otherwise, a node with
keyas tag is created with a string representation ofvalueas text node. Ifvalueisnilan attribute ânilâ set to âtrueâ is added. Unless the option:skip_typesexists and is true, an attribute âtypeâ is added as well according to the following mapping:XML_TYPE_NAMES = { "Symbol" => "symbol", "Fixnum" => "integer", "Bignum" => "integer", "BigDecimal" => "decimal", "Float" => "float", "TrueClass" => "boolean", "FalseClass" => "boolean", "Date" => "date", "DateTime" => "dateTime", "Time" => "dateTime" }
By default the root node is âhashâ, but that's configurable via the
:root option.
The default XML builder is a fresh instance of
Builder::XmlMarkup. You can configure your own builder with
the :builder option. The method also accepts options like
:dasherize and friends, they are forwarded to the builder.
Please login to continue.