Elm:
Разбор HTML

Как это сделать:

Elm изначально не анализирует сырой HTML самостоятельно; вместо этого, он сосредотачивается на отрисовке представлений с помощью своего модуля Html. Для анализа HTML обычно используют серверный сервис или внешнюю JavaScript библиотеку, затем передают данные в Elm. Вот базовая настройка Elm для работы с проанализированными данными HTML:

module Main exposing (main)

import Html exposing (Html, text)
import Json.Decode as Decode

type alias HtmlData =
    { tag : String
    , attributes : List (String, String)
    , content : String
    }

-- Предполагая, что у вас есть объект JSON, который представляет ваши данные HTML
htmlDataDecoder : Decode.Decoder HtmlData
htmlDataDecoder =
    Decode.map3 HtmlData
        (Decode.field "tag" Decode.string)
        (Decode.field "attributes" (Decode.list (Decode.tuple Decode.string Decode.string)))
        (Decode.field "content" Decode.string)

-- Замените на фактический JSON с сервера или внешней библиотеки JS
sampleJson : String
sampleJson = 
    """
    {"tag":"div", "attributes": [["class", "container"]], "content": "Привет, Elm!"}
    """

-- Декодирование образца JSON в HtmlData
decodedHtmlData : Result Decode.Error HtmlData
decodedHtmlData =
    Decode.decodeString htmlDataDecoder sampleJson

-- Отображение представления из наших данных HtmlData
view : HtmlData -> Html msg
view htmlData =
    Html.text (htmlData.content)

main : Html msg
main =
    case decodedHtmlData of
        Ok data ->
            view data
        
        Err error ->
            text "Не удалось проанализировать данные HTML"

Эта простая настройка показывает, как вы начнете работать с проанализированными данными HTML в Elm.

Подробнее

Исторически, сильное акцентирование Elm на типовой безопасности и надежной архитектуре означает, что прямой анализ HTML не является его сильной стороной. Elm блестит в создании надежных веб-приложений с минимальным количеством ошибок во время выполнения.

Для анализа HTML обычно используется JavaScript, который имеет зрелые библиотеки, такие как DOMParser и $.parseHTML от jQuery. Всю тяжелую работу вы выполняете в JavaScript, затем отправляете дерево разбора в Elm как сериализованный JSON. Для этого вы можете использовать порты (способ взаимодействия Elm с JavaScript) или веб-сервисы.

После попадания в Elm, декодеры JSON превращают сериализованные данные в структурированные типы Elm. При подходе декодирования JSON вы наслаждаетесь типовой безопасностью Elm и можете держать грязную логику анализа HTML вне вашего кодовой базы Elm.

Альтернативы? Если вам абсолютно необходимо анализировать HTML внутри Elm, вероятно, вам потребуется индивидуальное решение. Это может включать использование серверного парсера, который предоставляет API или пакет Elm, если вы найдете подходящий, хотя на данный момент выбор ограничен.

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

Для получения дополнительной информации о декодировании JSON в Elm:

Порты Elm для взаимодействия с JavaScript:

Обсуждения и познания сообщества: