haskell – HXT:在纯代码中读取和写入HTML时出现令人惊讶的行为

haskell – HXT:在纯代码中读取和写入HTML时出现令人惊讶的行为,第1张

概述我想从String读取 HTML,处理它并使用HXT将更改的文档作为String返回.由于此 *** 作不需要IO,我宁愿用runLA执行Arrow而不是runX. 代码看起来像这样(省略处理以简化): runLA (hread >>> writeDocumentToString [withOutputHTML, withIndent yes]) html 但是,结果中缺少周围的html标记: ["\n 我想从String读取 HTML,处理它并使用HXT将更改的文档作为String返回.由于此 *** 作不需要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"]

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

解决方法 如果你看两者的XmlTrees,你会发现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时出现令人惊讶的行为全部内容,希望文章能够帮你解决haskell – HXT:在纯代码中读取和写入HTML时出现令人惊讶的行为所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1078595.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存