Returns a string containing an XML representation of its receiver:
1 2 3 4 5 6 7 | { 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]
.12'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
.1234567891011class
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:123456789101112XML_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.