gpt4 book ai didi

haskell - HXT:在纯代码中读取和写入 HTML 到 String 时的令人惊讶的行为

转载 作者:行者123 更新时间:2023-12-03 14:07:35 30 4
gpt4 key购买 nike

我想从字符串中读取 HTML,处理它并使用 HXT 将更改后的文档作为字符串返回。由于这个操作不需要IO,我宁愿用runLA执行Arrow比runX .

代码如下(为简单起见省略处理):

runLA (hread >>> writeDocumentToString [withOutputHTML, withIndent yes]) html

不过周边 html结果中缺少标签:
["\n  <head>\n    <title>Bogus</title>\n  </head>\n  <body>\n        Some trivial bogus text.\n    </body>\n",""]

当我像这样使用 runX 时:
runX (readString [] html >>> writeDocumentToString [withOutputHTML, withIndent yes])

我得到了预期的结果:
["<html>\n  <head>\n    <title>Bogus</title>\n  </head>\n  <body>\n        Some trivial bogus text.\n    </body>\n</html>\n"]

为什么会这样,我该如何解决?

最佳答案

如果你看 XmlTree对于两者,您会看到 readString添加顶级 "/"元素。对于非IO runLA版本:

> putStr . formatTree show . head $ runLA xread html
---XTag "html" []
|
+---XText "\n "
|
+---XTag "head" []
...

并与 runX :
> putStr . formatTree show . head =<< runX (readString [] html)
---XTag "/" [NTree (XAttr "transfer-Status") [NTree (XText "200")...
|
+---XTag "html" []
|
+---XText "\n "
|
+---XTag "head" []
...
writeDocumentToString用途 getChildren去除这个根元素。

解决此问题的一种简单方法是使用类似 selem 的内容。包装 xread 的输出在一个类似的根元素中,为了使它看起来像输入 writeDocumentToString期望:
> runLA (selem "/" [xread] >>> writeDocumentToString [withOutputHTML, withIndent yes]) html
["<html>\n <head>\n <title>Bogus</title>\n </head>\n <body>\n Some trivial bogus text.\n </body>\n</html>\n"]

这将产生所需的输出。

关于haskell - HXT:在纯代码中读取和写入 HTML 到 String 时的令人惊讶的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7208559/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com