Creates an Elixir Map data structure from an XML string
Usage:
XmlToMap.naive_map("<foo><bar>123</bar></foo>")
Results in:
%{"foo" => %{"bar" => "123"}}
Converts xml string to an Elixir map with strings for keys.
This tool is inspired by Rails Hash.from_xml() but is "naive" in that it is convenient (requires no setup) but carries the same drawbacks. Use with caution.
XML and Maps are non-isomorphic. Attributes on some nodes don't carry over if the node has just one text value (like a leaf). Naive map has no validation over what should be a collection. If and only if nodes are repeated at the same level will they beome a list.
XmlToMap.naive_map("<foo><point><x>1</x><y>5</y></point><point><x>2</x><y>9</y></point></foo>")
# => %{"foo" => %{"point" => [%{"x" => "1", "y" => "5"}, %{"x" => "2", "y" => "9"}]}}
Depends on Erlsom to parse xml then converts the 'simple_form' structure into a map.
I prefer Erlsom because it is the best documented erlang xml parser and because it mentions that it does not produce new atoms during the scanning.
See tests for example usage.
If available in Hex, the package can be installed as:
- Add
elixir_xml_to_map
to your list of dependencies inmix.exs
:
```elixir
def deps do
[{:elixir_xml_to_map, "~> 0.1"}]
end
```
- Ensure
elixir_xml_to_map
is started before your application:
```elixir
def application do
[applications: [:elixir_xml_to_map]]
end
```