如何在使用 Yesod 渲染之前转换一些 Blaze `Html`?

How to transform some Blaze `Html` before rendering it with Yesod?

我有一些 HTML 由用户输入,显示在 Yesod 模板中。我想转换这个 HTML,在渲染之前从中剥离 style 属性,但我不知道如何。

如果我的模板包含 #{ html },我可以通过函数将 html 作为值传递,只需编写 #{ transform html },如果 transform 函数具有签名:transform :: Html -> Html 其中 Html 是由 blaze-html here 定义的类型。我看到的问题是 Blaze 似乎没有公开有用的功能来遍历 HTML 树,甚至只是获取给定 Html 的后代。那么你会建议哪些策略?我应该尝试进入 Blaze 内部吗?

我不确定这是否应该被视为纯粹是 Blaze 的问题。转换 Html 元素不是 Blaze 的主要用例之一,因此需要在使用 Yesod

渲染的上下文中解决这个问题

您必须首先呈现为 Text 或 ByteString,blaze 不提供分析内容的方法。然后,您可以使用 html-conduit 或 tagsoup(xss-sanitize 所做的)之类的库来处理数据。