Haskell:
Å jobbe med XML
Hvordan:
Haskell tilbyr biblioteker som xml-conduit
for å håndtere XML. Følgende eksempel demonstrerer parsing av en XML-streng og forespørsler av elementer:
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
import Text.XML
import Text.XML.Cursor
main :: IO ()
main = do
let xmlInnhold = "<greetings><hello>World!</hello></greetings>"
let dokument = parseLBS_ def $ T.encodeUtf8 $ T.pack xmlInnhold
let markør = fromDocument dokument
let halloTekster = markør $// element "hello" &/ content
print halloTekster -- ['World!']
Eksempelutdata:
["World!"]
Dypdykk
XML, forkortelse for eXtensible Markup Language, har lenge vært en grunnstein i dataserialisering langt før JSONs oppstigning. Det er ordrikt, men stivt og standardisert, noe som gjør det passende for strenge bedriftsmiljøer, arvesystemer, og industrier som finans og helsevesen.
Haskell har flere biblioteker for XML; men xml-conduit
er blant de kraftigste og mest brukte på grunn av sine effektive streaming- og parsingsegenskaper, del av conduit
-familien for håndtering av datastrømmer.
Alternativer inkluderer HXT
(Haskell XML Toolbox) som bruker piler for parsing og transformasjon, og tilbyr et annet paradigme for XML-manipulasjoner. Selv om HXT
er mindre populært nå på grunn av sin brattere læringskurve, forblir det fortsatt et solid valg for noen brukstilfeller.
Når du implementerer XML-behandling i Haskell, må du bry deg om koding, ettersom Haskell-strenger er Unicode og XML-data kanskje ikke er det. I tillegg kan XML-navnerom legge til ekstra kompleksitet i parsingen.
Se også:
xml-conduit
pakkedokumentasjon: https://hackage.haskell.org/package/xml-conduit- The Haskell XML Toolbox (HXT): http://hackage.haskell.org/package/hxt
- Boken “Real World Haskell”, Kapittel 16, for håndtering av XML: http://book.realworldhaskell.org/read/xml.html
- Haskell Wiki om XML: https://wiki.haskell.org/XML