# FastXmlToMap
**Creates an Elixir Map data structure from an XML string**
Usage:
```elixir
FastXmlToMap.naive_map("<foo><bar>123</bar></foo>")
```
Results in:
```elixir
%{"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.
```elixir
FastXmlToMap.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.
## Installation
If [available in Hex](https://hex.pm/docs/publish), the package can be installed as:
Add `fast_xml_to_map` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[{:fast_xml_to_map, "~> 0.1.0"}]
end
```
Or install with github
```elixir
def deps do
[{:fast_xml_to_map, git: "https://github.com/edragonconnect/fast_xml_to_map.git", branch: "master"}]
end
```