README.md

# SAXMap

[![hex.pm version](https://img.shields.io/hexpm/v/sax_map.svg)](https://hex.pm/packages/sax_map)

Converts an XML String to a Map.

Benefit from [Saxy](https://hex.pm/packages/saxy)'s SAX mode, this library has a good conversion efficiency.

## Installation

```elixir
def deps do
  [
    {:sax_map, "~> 0.1"}
  ]
end
```

## Example

```elixir

iex(1)> xml = """
...(1)> <?xml version="1.0" encoding="UTF-8"?>
...(1)> <thread>
...(1)>   <title>Hello</title>
...(1)>   <items>
...(1)>     <item>item1</item>
...(1)>     <item>item2</item>
...(1)>   </items>
...(1)> </thread>
...(1)> """
iex(2)> SAXMap.from_string(xml)
{:ok,
 %{
   "thread" => %{"items" => %{"item" => ["item1", "item2"]}, "title" => "Hello"}
 }}
```

Please **notice** that both XML attributes and comments are ignored.

## Benchmark

Only for your reference, all of credit belong to [Saxy](https://hex.pm/packages/saxy), the details of benchmark can be found in the `bench` directory of the repository.

```bash
Operating System: macOS
CPU Information: Intel(R) Core(TM) i5-4258U CPU @ 2.40GHz
Number of Available Cores: 4
Available memory: 8 GB
Elixir 1.9.4
Erlang 22.1.8

Benchmark suite executing with the following configuration:
warmup: 2 s
time: 10 s
memory time: 2 s
parallel: 1
inputs: none specified
Estimated total run time: 28 s

Benchmarking SAXMap.from_string...
Benchmarking XmlToMap.naive_map...

Name                         ips        average  deviation         median         99th %
SAXMap.from_string       24.15 K       41.40 μs    ±67.10%          35 μs         131 μs
XmlToMap.naive_map       16.28 K       61.42 μs    ±89.04%          49 μs         224 μs

Comparison:
SAXMap.from_string       24.15 K
XmlToMap.naive_map       16.28 K - 1.48x slower +20.02 μs

Memory usage statistics:

Name                  Memory usage
SAXMap.from_string        14.82 KB
XmlToMap.naive_map        33.20 KB - 2.24x memory usage +18.38 KB

**All measurements for memory usage were the same**
```