Если вы посмотрите на XmlTree
s для обоих, вы увидите, что 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
для удаления этого корня element.
. Один простой способ - использовать что-то вроде 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"]
Это дает желаемый результат.