Elm:
Работа с XML

Как:

В Elm для работы с XML используется пакет elm/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 ->
        -- Здесь что-то делаем с декодированной книгой
        Debug.toString book

    Err error ->
        -- Обработка ошибок
        Debug.toString error

Пример вывода, предполагая отсутствие ошибок:

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

Подробнее

XML (eXtensible Markup Language) существует с конца 90-х, когда веб был перегружен текстом, и существовала острая необходимость в структурированном, но гибком способе передачи данных. Из-за многословности и сложности XML потерял некоторую популярность перед JSON. Тем не менее, XML до сих пор широко распространен, особенно в корпоративной среде или протоколах, таких как SOAP.

Подход Elm к XML является функциональным и типобезопасным. Использование пакета elm/xml означает принятие философии Elm о явности и надежности. Что касается разбора, пакет предоставляет ряд декодеров, которые вы компонуете для обработки структуры XML.

По сравнению с альтернативами, такими как DOMParser в JavaScript или ElementTree в Python, метод Elm может показаться более многословным, но он обеспечивает безопасность. Нет исключений времени выполнения из-за отсутствующих полей или несоответствия типов; если что-то не так, вы получаете ошибку на этапе компиляции.

Функции декодирования elm/xml основаны на сопоставлении узлов XML с типами Elm. Вы строите декодеры, которые отражают форму ваших данных, обеспечивая, чтобы ваше приложение Elm обрабатывало XML так же строго, как и свои внутренние структуры данных.

Генерация XML в Elm встречается реже, но может быть достигнута с помощью elm/xml и его аналога Xml.Encode.

Смотрите также