Html 有没有办法在Elm中遍历XML树?

Html 有没有办法在Elm中遍历XML树?,html,xml,elm,Html,Xml,Elm,如果我有XML数据要转换成Elm Html,有没有一种方法可以遍历XML树,寻找可能在树中任何位置的元素?例如,我想以这个传入的xml为例: ,但我真的看不到一种在树上行走、沿途变换标记的方法 您提到的库是一个解码器,但我建议您在这里使用底层解析器 您可以使用elm/parser构建您自己的解析器,该解析器输出一棵树,您可以轻松地向下走,输出Html或表示Html的字符串。或者,您可以使用已经为您构建的 这是一个很好的选择。我相信您在内部提到的elm xml解码包使用了它 下面是一个示例,说明

如果我有XML数据要转换成Elm Html,有没有一种方法可以遍历XML树,寻找可能在树中任何位置的元素?例如,我想以这个传入的xml为例:



,但我真的看不到一种在树上行走、沿途变换标记的方法

您提到的库是一个解码器,但我建议您在这里使用底层解析器

您可以使用
elm/parser
构建您自己的解析器,该解析器输出一棵树,您可以轻松地向下走,输出
Html
或表示Html的字符串。或者,您可以使用已经为您构建的

这是一个很好的选择。我相信您在内部提到的elm xml解码包使用了它

下面是一个示例,说明如何让Elm使用jinjor/Elm xml解析器获取一个html字符串并输出Elm自己的html版本(特别是
xmlToHtml
函数显示了如何“沿着树走”由
XmlParser
输出的结构):

将Html导入为H
导入XmlParser
xmlToHtml:XmlParser.Node->H.Html
XMLTOHTMLXMLNode=
案例xmlNode
元素标记属性子项->
--执行xml标记或属性到此处所需内容的任何映射!
H.node标记[](List.map xmlToHtml子项)
XmlParser.Text文本->
H.文本
视图:Model->H.Html从不
视图=
让
xml=
"""
Lorem ipsum文本位于此处。可能包含一些文本

也许这里还有一段

""" 在里面 Result.map (.root>>xmlToHtml) (XmlParser.parse xml) |>Result.withDefault(H.text“未能解析xml:(“”)
当然可以遍历树。您需要树的定义,可能是一个记录结构,然后您需要决定如何处理找到的每个节点。到目前为止,您得到了什么?这很好。但是我如何导入模型?我正在尝试在Ellie中运行它:它抱怨找不到该类型。模型是just无论您的应用程序使用什么类型。您都可以自己声明。下面是您的Ellie的一个运行示例:
import Html as H
import XmlParser

xmlToHtml : XmlParser.Node -> H.Html Never
xmlToHtml xmlNode =
    case xmlNode of
        XmlParser.Element tag attributes children ->
            -- do any mapping of the xml tag or attribute to what you want here!
            H.node tag [] (List.map xmlToHtml children)

        XmlParser.Text text ->
            H.text text


view : Model -> H.Html Never
view _ =
    let
        xml =
            """
            <arbitrary>
              <numberOfTagsHere>
                <p>Lorem ipsum text goes here. May contain <tag foo="bar">some text</tag></p>
                <p>Maybe another paragraph here.</p>
              </numberOfTagsHere>
            </arbitrary>
            """
    in
    Result.map
        (.root >> xmlToHtml)
        (XmlParser.parse xml)
        |> Result.withDefault (H.text "  Failed to parse the xml :(  ")