Haskell:
Lavorare con XML
Come fare:
Haskell offre librerie come xml-conduit
per gestire XML. Il seguente esempio dimostra il parsing di una stringa XML e l’interrogazione degli elementi:
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
import Text.XML
import Text.XML.Cursor
main :: IO ()
main = do
let xmlContent = "<greetings><hello>World!</hello></greetings>"
let document = parseLBS_ def $ T.encodeUtf8 $ T.pack xmlContent
let cursor = fromDocument document
let helloTexts = cursor $// element "hello" &/ content
print helloTexts -- ['World!']
Output dell’esempio:
["World!"]
Approfondimento
XML, abbreviazione di eXtensible Markup Language, è stato un pilastro nella serializzazione dei dati molto prima dell’ascesa di JSON. È verboso, ma rigido e standardizzato, rendendolo adatto per ambienti aziendali severi, sistemi legacy e settori come la finanza e la sanità.
Haskell ha diverse librerie per XML; tuttavia, xml-conduit
è tra le più potenti e utilizzate grazie alle sue efficienti capacità di streaming e parsing, parte della famiglia conduit
per la gestione dei flussi di dati.
Le alternative includono HXT
(Haskell XML Toolbox) che utilizza le frecce per il parsing e la trasformazione, fornendo un diverso paradigma per le manipolazioni XML. Anche se HXT
è meno popolare ora a causa della sua curva di apprendimento più ripida, rimane comunque una scelta solida per alcuni casi d’uso.
Quando si implementa l’elaborazione XML in Haskell, bisogna prestare attenzione alla codifica, poiché le stringhe Haskell sono in Unicode e i dati XML potrebbero non esserlo. Inoltre, gli spazi dei nomi XML possono aggiungere ulteriore complessità al parsing.
Vedi Anche:
- La documentazione del pacchetto
xml-conduit
: https://hackage.haskell.org/package/xml-conduit - Haskell XML Toolbox (HXT): http://hackage.haskell.org/package/hxt
- Il libro “Real World Haskell”, Capitolo 16, per la gestione XML: http://book.realworldhaskell.org/read/xml.html
- Wiki di Haskell su XML: https://wiki.haskell.org/XML