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
value
is a hash there's a recursive call withkey
as:root
. -
If
value
is an array there's a recursive call withkey
as:root
, andkey
singularized as:children
. -
If
value
is a callable object it must expect one or two arguments. Depending on the arity, the callable is invoked with theoptions
hash as first argument withkey
as:root
, andkey
singularized 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
value
responds toto_xml
the method is invoked withkey
as: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
key
as tag is created with a string representation ofvalue
as text node. Ifvalue
isnil
an attribute ânilâ set to âtrueâ is added. Unless the option:skip_types
exists 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.