更新:经过多次不同的尝试,我现在得出的结论是,下面看到的行为是预期的,我只是遇到困难,因为我稍后会使用 ToJson。如果我完全解决它会更新。
==================================================== =============
我正在尝试使用 xml-conduit 来实现这一点:
- 将文档的光标向下移动到 html 文档的元素。
- 将此节点的任何后代视为文本。即不仅获取文本形式的内容,还获取标签本身。
例如,我根据下面的评论编辑了这个例子
<ol> <li class="c1"> this is really "good work" <i>John</i>. </li> </ol>
应该返回
"<li class="c1"> this is really "good work" <i>John</i> </li>"
而我得到
" "\u003cli class=\"c1\"\u003e 这真的是“好作品”\u003ci\u003eJohn\u003c/i\u003e\u003c/li\u003e
因此,标签内发生的事情与内容发生的事情不同。我想也许 ToHtml 实例并不是我真正想要的。我只想折叠所有后代,将它们的标签和内容转换为文本。虽然我找不到办法。
import Text.Blaze.Html (toHtml, preEscapedToHtml)
import Text.Blaze.Html.Renderer.Utf8 (renderHtml)
--import Text.Blaze.Html.Renderer.String (renderHtml)
--import Text.Blaze.Html.Renderer.Text (renderHtml)
import Data.Text.Encoding (decodeUtf8)
import Data.ByteString.Lazy (toStrict)
extractAllParas :: Cursor -> [ Text ]
extractAllParas c = do
let mt' = c $/ laxElement "body" &// laxElement "ol" &/ anyElement
mt = (map (decodeUtf8 . toStrict . renderHtml . toHtml . node) $ mt')
case mt of
[ "" ] -> []
paras -> formatParas paras
formatParas :: [ 文本 ] -> [ 文本 ]