The billstclair/elm-xml-extra package is an extension of the eeue56/elm-xml package that simplifies creating Decoders for.
There's an example in example.elm, which you can run with elm reactor:
cd .../elm-xml-extra
elm reactorThen aim your web browser at localhost:8000/example.elm. Its output is below.
XML:
<?xml version="1.0" encoding="UTF-8"?>
<person>
<name>noah</name>
<age max="100">50</age>
</person>
<person>
<name>josh</name>
<age max="100">57</age>
</person>Decoded:
{ name = "noah", age = 50 }Given these definitions:
import Json.Decoder as JD exposing ( Decoder )
import Xml.Extra exposing ( decodeXml )
type alias Person =
{ name : String
, age : Int
}
personDecoder : Decoder Person
personDecoder =
JD.map2 Person
(JD.field "name" JD.string)
(JD.field "age" JD.int)
personTagSpecs : List TagSpec
personTagSpecs =
[ ("name", Required)
, ("age", Required)
]
xml =
"""
<?xml version="1.0" encoding="UTF-8"?>
<person>
<name>noah</name>
<age max="100">50</age>
</person>
"""Here's the code to turn that XML string into a Person object:
decodeXml xml "person" personDecoder personTagSpecsIf your XML has more than one top-level tag, you can use the other exported functions, which the code for decodeXml should help you understand, to handle it.