我用hxt来解析一些html。它在<textarea>
内有未转义的html。 hxt会给出无效的结果(在这种情况下,它会在内容标记为<a>
时发现)。最小的测试用例(对于GHCi)是
let doc = parseHtml "<textarea>before<a>link</a>after</textarea>"
runX . xshow $ doc //> hasName "textarea"
,结果为[<textarea>before</textarea><textarea/>]
。
看起来没有内容的标签(例如<tag/>
)不会破坏解析。
有没有办法用hxt解析这样的html?
答案 0 :(得分:3)
问题在于HandsomeSoup(我假设你的parseHTML
来自哪里)对于textarea
不能包含{{a
这样的事实是挑剔的1}}在有效的HTML中,并将尝试“修复”它看到的任何此类错误。
您可以切换到hxt-tagsoup吗?它仍然会接受凌乱的HTML(未封闭的元素等),但对于遵守HTML模式并不那么挑剔 - 特别是它会让你在a
中拥有textarea
:
import Text.XML.HXT.Core
import Text.XML.HXT.TagSoup
let content = "<textarea>before<a>link</a>after</textarea>"
let doc = readString [ withTagSoup ] content
runX . xshow $ doc //> hasName "textarea"
这将打印以下内容:
["<textarea>before<a>link</a>after</textarea>"]
我认为你想要的是什么。