html - 有没有办法在 Elm 中遍历 XML 树?
问题描述
如果我有试图将 XML 数据转换为 Elm Html 的 XML 数据,有没有办法遍历 XML 树,寻找可能位于该树中任何位置的元素?例如,我想采用这个传入的 xml:
<root>
<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>
</root>
做这样的事情:
<html>
<div class="arbitrary">
<div class="numberOfTagsHere">
<p>Lorem ipsum text goes here. May contain <span class="foo bar">some text</span></p>
<p>Maybe another paragraph here.</p>
</div>
</div>
</html>
这超出了 Elm 的范围吗?我应该改用 XSLT 吗?
我看到有像这样的 XML 解析库,但我并没有真正看到一种方法来走一棵树,一路转换标签。
解决方案
你提到的库是一个解码器,但我建议你在这里使用底层解析器。
您可以使用elm/parser
构建自己的解析器来输出一棵树,您可以轻松地向下走并输出Html
代表 html 的字符串或字符串。或者,您可以使用已经为您构建的一个。
https://github.com/jinjor/elm-xml-parser是一个不错的选择。我相信您在内部提到的 elm-xml-decode 包使用了它。
这是一个示例,说明您可能如何让 Elm 获取一个 html 字符串并使用 jinjor/elm-xml-parser 输出 Elm 自己的 Html 版本(该xmlToHtml
函数特别显示了您如何“走下树”结构,由XmlParser
):
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 :( ")
推荐阅读
- java - 为什么弱连接时tcp数据发送中断
- mysql - 添加带有天数的表时出现错误 1064 (42000)
- c# - 如何仅从法线向量获得下向量?
- python - 为特定 id 值生成 json 输出时出错
- react-native - 如何知道“TextInput”的“onBlur”是否因为“enter”键被按下而被调用?
- c# - AWS4 签名教程遇到问题,哈希与示例不匹配
- vba - 需要密码才能打开访问表单
- python-3.x - 如何在python中打印列名以及非空值?
- javascript - Bing Web Search API GET 请求返回 404 未找到
- python - 对称矩阵及其转置的逻辑比较