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(可扩展标记语言)自 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 来实现。

参见