billstclair/elm-xml-extra/1.0.0

NOTE: this package is not compatible with Elm 0.19.1

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 reactor

Then 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 personTagSpecs

If 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.