Generates HTTP request for XML API. Can be used with elm/http
.
Using ymtszw/elm-xml-decode
for decoding XML response into Elm values.
import Http
import Http.Xml
import Xml.Decode exposing (..)
type alias Data =
{ string : String
, integers : List Int
}
type Msg = XmlApiResponse (Result Http.Error Data)
getXml : Cmd Msg
getXml =
Http.get
{ url = "https://example.com/data.xml"
, expect = Http.Xml.expectXml XmlApiResponse dataDecoder
}
dataDecoder : Decoder Data
dataDecoder =
map2 Data
(path [ "path", "to", "string" ] (single string))
(path [ "path", "to", "int", "list" ] (list int))
-- Use with customization
trickyGetXml : Cmd Msg
trickyGetXml =
Http.riskyRequest
{ method = "GET"
, headers = [ Http.header "Accept" "application/xml" ]
, url = "https://example.com/data.xml"
, body = Http.emptyBody
, expect = Http.Xml.expectXml XmlApiResponse dataDecoder
, timeout = Nothing
, tracker = Nothing
}
- It now supports
elm/http@2.x
, which dropsHttp.Request
data type. As a result, there is no interface to nicely addAccept: application/xml
header. You have to add the header if your target servers rigorously require them.- Probably the most reasonable interface which should take
Accept
header values areHttp.Expect
. - See this issue: elm/http#54
- Probably the most reasonable interface which should take
BSD-3-Clause