Haskell:
XMLの扱い方
方法:
Haskellでは、xml-conduit
のようなライブラリを使用してXMLを扱います。以下の例は、XML文字列の解析と要素のクエリについて示しています:
{-# 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!']
サンプル出力:
["World!"]
深掘り:
XMLは、eXtensible Markup Languageの略で、JSONが台頭するずっと前からデータシリアライゼーションにおいて重要な地位を占めています。それは冗長ですが、厳格で標準化されており、金融や医療などの業界、レガシーシステム、厳格な企業環境に適しています。
HaskellにはXML用の複数のライブラリがありますが、効率的なストリーミングと解析能力を備えたxml-conduit
が、conduit
ファミリーのデータストリーム処理の一部として、最も強力で広く使用されています。
代替品には、解析と変換にアローを使用するHXT
(Haskell XML Toolbox)があり、XMLの操作に対する異なるパラダイムを提供します。HXT
は学習曲線がより急であるため現在ではあまり人気がありませんが、一部のユースケースには依然として確かな選択肢です。
HaskellでXML処理を実装するときは、Haskellの文字列がUnicodeであり、XMLデータがそうでない可能性があるため、エンコーディングに注意を払う必要があります。さらに、XMLの名前空間は解析を複雑にする追加の要素かもしれません。
参照:
xml-conduit
パッケージのドキュメンテーション: https://hackage.haskell.org/package/xml-conduit- Haskell XMLツールボックス(HXT): http://hackage.haskell.org/package/hxt
- 「実際の世界のHaskell」の本、第16章、XMLの取り扱い: http://book.realworldhaskell.org/read/xml.html
- Haskell WikiのXML: https://wiki.haskell.org/XML