Elm:
XMLの扱い方

方法:

Elmでは、elm/xmlパッケージを使用してXMLを取り扱います。XMLスニペットを解析する方法を簡単に見てみましょう:

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 ->
        -- ここでデコードされたbookに何かをする
        Debug.toString book

    Err error ->
        -- エラー処理
        Debug.toString error

エラーがない場合のサンプル出力:

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

ディープダイブ

XML(eXtensible Markup Language)は90年代後半から存在し、Webがテキスト中心で、データを運ぶための構造化されたが柔軟な方法が必要だった時代に登場しました。冗長性と複雑さのため、XMLはJSONに比べていくらかの地位を失っています。しかし、XMLは特に企業環境やSOAPのようなプロトコルで、依然として広く使用されています。

ElmのXMLへのアプローチは関数的で型安全です。elm/xmlパッケージを使用することは、明示性と信頼性のElm哲学を受け入れることを意味します。解析に関しては、パッケージがXML構造を扱うために組み合わせる様々なデコーダを提供します。

JavaScriptのDOMParserやPythonのElementTreeなどの代替手段と比較すると、Elmの方法は冗長に思えるかもしれませんが、安全性を確保します。欠損フィールドや型の不一致に対するランタイム例外はありません。何か問題があれば、コンパイル時エラーが発生します。

elm/xmlのデコード関数は、XMLノードをElmの型にマッピングすることに注力しています。データの形に合わせたデコーダを構築し、Elmアプリが自身の内部データ構造と同じくらい厳密にXMLを扱うことを保証します。

ElmでのXMLの生成はあまり一般的ではありませんが、elm/xmlの対となるXml.Encodeで実現できます。

参照