是否可以通过 hxt <textarea> 中包含 <a> 进行解析?
题
我使用 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>"]
我认为这就是你想要的。
不隶属于 StackOverflow