XML decoder, sharing the spirit of Json.Decode.
Using jinjor/elm-xml-parser as its parser component.
eeue56/elm-xml is an existing full-package XML parser/decoder for Elm, though I intend to provide an alternative XML decoder which exhibits following properties:
Decoder-based APIs, sharing the spirit of Json.DecodeXml.Decode.Pipeline, Xml.Decode.ExtraJson.Decode.Pipeline and Json.Decode.Extra, respectivelyListDecoder typeBasics:
import Xml.Decode exposing (Decoder, map2, path, single, list, string, int)
type alias Example =
{ string : String
, integers : List Int
}
exampleDecoder : Decoder Example
exampleDecoder =
map2 Example
(path [ "path", "to", "string", "value" ] (single string))
(path [ "path", "to", "int", "values" ] (list int))Execute decode:
Xml.Decode.run exampleDecoder
"""
<root>
<path>
<to>
<string>
<value>SomeString</value>
</string>
<int>
<values>1</values>
<values>2</values>
</int>
</to>
</path>
</root>
"""
--> Ok { string = "SomeString", integers = [ 1, 2 ] } : ExampleWe have map, map2 and variants, though the following methods are also possible.
Pipeline style!:
import Xml.Decode exposing (Decoder, succeed, single, list, string, int)
import Xml.Decode.Pipeline exposing (requiredPath)
exampleDecoder : Decoder Example
exampleDecoder =
succeed Example
|> requiredPath [ "path", "to", "string", "value" ] (single string)
|> requiredPath [ "path", "to", "int", "values" ] (list int)Applicative style!:
import Xml.Decode exposing (Decoder, succeed, path, single, list, string, int)
import Xml.Decode.Extra exposing ((|:))
exampleDecoder : Decoder Example
exampleDecoder =
succeed Example
|: path [ "path", "to", "string", "value" ] (single string)
|: path [ "path", "to", "int", "values" ] (list int)npm install
npm test
npm run watch:test # Monitor file changes and update doc-test
npm run docs # Compile and generate docs.json
npm run analyse # Analyse Elm codeBenchmark and refinements/optimizations would be cool... though I haven't committed to them. Help, help me!
BSD-3-Clause