0

所以我需要阅读一个大的 XML 文件。我不想将其解析为 DOM 树并将其全部保存在内存中。我宁愿寻找的是一种阅读器,它提供对 Haskell 中 XML 数据的快速、非缓存、只进的访问。

编辑:似乎有一些关于同一主题的问题,但是我没有在那里找到答案。所以我要再次寻找的是:

  1. 一个 XML 游标(快速、单向、无惰性、无缓存、随用随处理)库
  2. 一个如何使用它的例子。

编辑: Text.XML.Enumerator.Parse 似乎是答案:这是一个不错的选择吗?

4

1 回答 1

2

我用于类似任务的最佳模块是xml -conduit包中的Text.XML.Stream.Parse 。模块索引包含这个简单的 API 示例:

{-# LANGUAGE OverloadedStrings #-}
import Control.Monad.Trans.Resource
import Data.Conduit (($$))
import Data.Text (Text, unpack)
import Text.XML.Stream.Parse

data Person = Person Int Text
    deriving Show

parsePerson = tagName "person" (requireAttr "age") $ \age -> do
    name <- content
    return $ Person (read $ unpack age) name

parsePeople = tagNoAttr "people" $ many parsePerson

main = do
    people <- runResourceT $
            parseFile def "people.xml" $$ force "people required" parsePeople
    print people
于 2013-11-06T15:55:19.840 回答