Haskell 如何使用xml导管提取子级的标记和内容?

Haskell 如何使用xml导管提取子级的标记和内容?,haskell,xml-conduit,Haskell,Xml Conduit,更新:经过多次不同的尝试,我现在得出的结论是,下面看到的行为是预期的,我只是遇到了一些困难,因为我以后会使用ToJson。如果我完全解决它,将进行更新。 ============================================================================================== 我正在尝试使用xml管道来实现这一点: 将文档的光标向下移动到html文档的元素 将此节点的任何子体视为文本。i、 e.不仅要将内容作为文本获取,还要获取

更新:经过多次不同的尝试,我现在得出的结论是,下面看到的行为是预期的,我只是遇到了一些困难,因为我以后会使用ToJson。如果我完全解决它,将进行更新。

==============================================================================================

我正在尝试使用xml管道来实现这一点:

  • 将文档的光标向下移动到html文档的元素
  • 将此节点的任何子体视为文本。i、 e.不仅要将内容作为文本获取,还要获取标签本身
例如,我根据下面的评论编辑了这个例子


formatParas::[Text]->[Text]

您能提供一个HTML输入示例吗?我正在加载一个Utf8编码的本地文件。我希望元素中的所有元素的祖先都被“折叠”并存储为带有标记的文本,其中的特殊字符被保留并存储为文本。事实上,我注意到了,我在上面犯了一个错误。下面的示例html:
  • Hi-there user05402
  • 应该是““
  • Hi-there user05402
  • ”::Text`(对不起,编辑时间用完了)当我得到“\u003cli\u003e Hi-there\u003ci\u003euser05402\u003e\u003c/I\u003e\u003e\u003c/li\u003e”时,内容中的特殊字符,例如“,也会变成”
    <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>" 
    
    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