Elm:
Att arbeta med XML

Hur man gör:

I Elm hanterar du XML med paketet elm/xml. Här är en snabb titt på hur man tolkar ett XML-utdrag:

import Xml.Decode exposing (..)
import Xml.Decode.Pipeline exposing (..)

xmlString = """
<book id="123">
    <title>Elm in Action</title>
    <author>Robin Heggelund Hansen</author>
</book>
"""

type alias Bok =
    { id : String
    , title : String
    , author : String
    }

bokDecoder : Decoder Bok
bokDecoder =
    decode Bok
        |> required "id" (attribute "id")
        |> required "titel" (child "title" (content text))
        |> required "författare" (child "author" (content text))

case Xml.Decode.fromString bokDecoder xmlString of
    Ok bok ->
        -- Gör något med den tolkade boken här
        Debug.toString bok

    Err error ->
        -- Hantera fel
        Debug.toString error

Exempelutdata, förutsatt att inga fel uppstår:

"{ id = \"123\", titel = \"Elm in Action\", författare = \"Robin Heggelund Hansen\" }"

Fördjupning

XML (Extensible Markup Language) har funnits sedan sent 90-tal, en tid då webben var texttung och behovet av ett strukturerat, men flexibelt sätt att bära data var avgörande. På grund av sin utförlighet och komplexitet har XML förlorat mark till JSON. Dock är XML fortfarande utbrett, särskilt i företagsmiljöer eller protokoll som SOAP.

Elms förhållningssätt till XML är funktionellt och typsäkert. Att använda paketet elm/xml innebär att omfamna Elms filosofi om explicititet och tillförlitlighet. När det gäller tolkning erbjuder paketet ett utbud av dekodare som du sammanställer för att hantera XML-strukturen.

Jämfört med alternativ som JavaScripts DOMParser eller Pythons ElementTree kan Elms metod verka mer omständlig men säkerställer säkerhet. Inga körtidsfel för saknade fält eller typmismatchningar; om något är fel får du ett kompileringsfel.

elm/xml-dekoderfunktionerna baseras på att avbilda XML-noder till Elm-typer. Du bygger dekodare som speglar din datas struktur, vilket säkerställer att din Elm-app hanterar XML lika rigoröst som sina egna interna datastrukturer.

Att generera XML är mindre vanligt i Elm men kan uppnås med elm/xml:s motsvarighet Xml.Encode.

Se Också