代码看起来像这样(省略处理以简化):
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时出现令人惊讶的行为所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)