是否可以通过hxt <textarea>解析&lt; a&gt;在它?</textarea>

时间:2012-10-01 09:07:35

标签: html haskell hxt

我用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?

1 个答案:

答案 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>"]

我认为你想要的是什么。