0

更新:经过多次不同的尝试,我现在得出的结论是,下面看到的行为是预期的,我只是遇到困难,因为我稍后会使用 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 :: [ 文本 ] -> [ 文本 ]

4

0 回答 0