Elm:
Arbeiten mit XML

Wie geht das:

In Elm arbeitet man mit XML mithilfe des elm/xml Pakets. Hier ist ein kurzer Einblick in das Parsen eines XML-Snippets:

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 Book =
    { id : String
    , title : String
    , author : String
    }

bookDecoder : Decoder Book
bookDecoder =
    decode Book
        |> required "id" (attribute "id")
        |> required "title" (child "title" (content text))
        |> required "author" (child "author" (content text))

case Xml.Decode.fromString bookDecoder xmlString of
    Ok book ->
        -- Mach hier etwas mit dem dekodierten Buch
        Debug.toString book

    Err error ->
        -- Fehler behandeln
        Debug.toString error

Beispielausgabe, unter der Annahme, dass keine Fehler vorliegen:

"{ id = \"123\", title = \"Elm in Action\", author = \"Robin Heggelund Hansen\" }"

Tiefere Einblicke

XML (Extensible Markup Language) gibt es seit den späten 90er Jahren, einer Zeit, als das Web textlastig war und der Bedarf an einer strukturierten, aber dennoch flexiblen Methode zur Datenübertragung entscheidend war. Aufgrund seiner Weitschweifigkeit und Komplexität hat XML etwas an Boden gegenüber JSON verloren. Dennoch ist XML, vor allem in Unternehmensumgebungen oder Protokollen wie SOAP, weiterhin weit verbreitet.

Elms Ansatz zu XML ist funktional und typsicher. Die Nutzung des elm/xml Pakets bedeutet, die Elm-Philosophie von Explizitheit und Zuverlässigkeit zu übernehmen. Wenn es um das Parsen geht, bietet das Paket eine Reihe von Dekodierern, die Sie kombinieren, um die XML-Struktur zu verarbeiten.

Im Vergleich zu Alternativen wie JavaScripts DOMParser oder Pythons ElementTree könnte Elms Methode umständlicher erscheinen, gewährleistet aber Sicherheit. Keine Laufzeitausnahmen für fehlende Felder oder Typinkonsistenzen; wenn etwas nicht stimmt, erhalten Sie einen Kompilierzeitfehler.

Die Dekodierungsfunktionen von elm/xml basieren auf der Zuordnung von XML-Knoten zu Elm-Typen. Sie erstellen Dekodierer, die die Form Ihrer Daten widerspiegeln, und stellen sicher, dass Ihre Elm-App XML genauso strikt behandelt wie ihre eigenen internen Datenstrukturen.

Die Generierung von XML ist in Elm weniger verbreitet, kann aber mit dem Gegenstück zu elm/xml, Xml.Encode, erreicht werden.

Siehe auch