我想从字符串中读取 HTML,对其进行处理并使用 HXT 将更改后的文档作为字符串返回。由于此操作不需要 IO,我宁愿执行箭头runLA
比与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
uses 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"]
这会产生所需的输出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)