我使用 hxt 来解析一些 html。它里面有未转义的 html <textarea>. 。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?

有帮助吗?

解决方案

问题是 帅汤 (我假设这是你的 parseHTML 来自)对诸如以下事实之类的事情很挑剔 textarea 不能包含 a 在有效的 HTML 中,并将尝试“修复”它看到的任何此类错误。

你可以切换到 hxt标签汤?它仍然会接受杂乱的 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>"]

我认为这就是你想要的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top