Elm:
Análise de HTML

Como Fazer:

Em Elm, usamos elm/html para criar HTML e elm/parser para interpretar strings de HTML. Vamos a um exemplo:

module Main exposing (..)

import Html exposing (Html, text)
import Html.Attributes exposing (id)
import Html.Parser exposing (run)
import Html.Parser.Html5 exposing (node, textNode)
import Html.Parser.Util exposing (parse)


type alias Model =
    { content : String }


type Msg
    = HtmlParsed (Result String (Html Msg))


main =
    Html.program
        { init = init
        , view = view
        , update = update
        , subscriptions = \_ -> Sub.none
        }


init : (Model, Cmd Msg)
init =
    ( { content = "" }
    , Cmd.none
    )


update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
    case msg of
        HtmlParsed (Ok html) ->
            ( { model | content = toString html }, Cmd.none )

        HtmlParsed (Err error) ->
            ( { model | content = "Erro ao fazer parsing: " ++ error }, Cmd.none )

view : Model -> Html Msg
view model =
    Html.div []
        [ Html.pre [] [ text model.content ] ]


parseHtml : String -> Cmd Msg
parseHtml htmlString =
    let
        parser =
            node "div" []
                [ node "span" [ id "my-id" ] [ textNode "Olá, Mundo!" ]
                ]
    in
    Task.perform HtmlParsed (Task.succeed (run parser htmlString))


-- Suponha que `sampleHtml` é uma string de HTML que você obteve de alguma forma.
sampleHtml : String
sampleHtml =
    "<div><span id=\"my-id\">Olá, Mundo!</span></div>"

Quando executamos parseHtml sampleHtml, obtemos como resultado a representação Elm do HTML que podemos manipular mais facilmente.

Aprofundamento

Historicamente, o parsing de HTML foi e continua sendo um desafio devido à complexidade e variações do HTML. Ferramentas como elm/html e elm/parser simplificaram esses processos, permitindo uma manipulação mais direta e confiável do HTML dentro do Elm. Embora Elm seja fortemente tipado e funcional, processos como o parsing de HTML se beneficiam de uma abordagem declarativa, o que se alinha bem com os princípios da linguagem.

Alternativas para parsing de HTML em Elm incluem utilizar diretamente APIs de JavaScript por meio de ports, o que pode ser adequado para casos onde a biblioteca de parsing de Elm não é suficiente.

Detalhes de implementação são importantes: como Elm é uma linguagem funcional, cada resultado deve ser tratado - sucesso ou erro. Essa abordagem previne muitos bugs que são comuns em outras linguagens onde o tratamento de erros é opcional ou negligenciado.

Veja Também