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 に答える