Method: Hash.from_xml

Defined in:
activesupport/lib/active_support/core_ext/hash/conversions.rb

.from_xml(xml, disallowed_types = nil) ⇒ Object

Returns a Hash containing a collection of pairs when the key is the node name and the value is its content

xml = "  <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n    <hash>\n      <foo type=\"integer\">1</foo>\n      <bar type=\"integer\">2</bar>\n    </hash>\n"

hash = Hash.from_xml(xml)
# => {"hash"=>{"foo"=>1, "bar"=>2}}

DisallowedType is raised if the XML contains attributes with type="yaml" or type="symbol". Use Hash.from_trusted_xml to parse this XML.

Custom disallowed_types can also be passed in the form of an array.

xml = "  <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n    <hash>\n      <foo type=\"integer\">1</foo>\n      <bar type=\"string\">\"David\"</bar>\n    </hash>\n"

hash = Hash.from_xml(xml, ['integer'])
# => ActiveSupport::XMLConverter::DisallowedType: Disallowed type attribute: "integer"

Note that passing custom disallowed types will override the default types, which are Symbol and YAML.



128
129
130
# File 'activesupport/lib/active_support/core_ext/hash/conversions.rb', line 128

def from_xml(xml, disallowed_types = nil)
  ActiveSupport::XMLConverter.new(xml, disallowed_types).to_h
end