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 ->
        -- 여기에서 디코드된 책을 가지고 무언가를 함
        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에 비해 다소 인기를 잃었습니다. 그러나 특히 기업 환경이나 SOAP 같은 프로토콜에서는 XML이 여전히 널리 사용되고 있습니다.

Elm의 XML 접근 방식은 함수적이고 타입 안전합니다. elm/xml 패키지를 사용한다는 것은 명시성과 신뢰성이라는 Elm 철학을 받아들이는 것을 의미합니다. 파싱과 관련해서, 이 패키지는 XML 구조를 처리할 수 있도록 여러 디코더들을 구성하여 제공합니다.

JavaScript의 DOMParser나 Python의 ElementTree 같은 대안들에 비해 Elm의 방식은 더 장황해 보일 수 있지만 안전성을 보장합니다. 필드 누락이나 타입 불일치에 대한 런타임 예외가 없습니다; 무엇인가 문제가 있다면, 컴파일 시간 오류를 받게 됩니다.

elm/xml 디코드 함수들은 XML 노드들을 Elm 타입에 매핑하는 데 중점을 둡니다. 데이터의 모양을 반영하는 디코더들을 만들어서, Elm 애플리케이션이 자체 내부 데이터 구조만큼 정밀하게 XML을 처리할 수 있도록 합니다.

Elm에서 XML 생성은 덜 일반적이지만 elm/xml의 대응물 Xml.Encode를 사용하여 달성할 수 있습니다.

참고