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
- Elm-Leitfaden zu JSON, der auch für die XML-Denkweise gilt: https://guide.elm-lang.org/interop/json.html
- XML-Standard von W3C für ein tieferes Verständnis von XML selbst: https://www.w3.org/XML/