[Haskell-cafe] memory needed for SAX parsing XML

Daniil Elovkov daniil.elovkov at googlemail.com
Mon Apr 19 06:01:27 EDT 2010

Hello haskellers!

I'm trying to process an xml file with as little footprint as possible. 
SAX is alright for my case, and I think that's the lightest way 
possible. So, I'm looking at HaXml.SAX

I'm surprised to see that it takes about 56-60 MB of ram. This seems 
constant relative to xml file size, which is expected. Only slightly 
depends on it as I recursively traverse the list of sax events. But it 
seems like too much.

The size of the file is from 1MB to 20MB.

The code is something like this

main = do
     (fn:_) <- getArgs
     h <- openFile fn ReadMode
     c <- hGetContents h
     let out = proc $ fst $ saxParse fn c
     putStrLn out

-- 'f' is tail-recursive
-- 'i' is used only to ensure that the list is completely traversed

proc es = show $ f es 0
  where f :: [SaxElement] -> Int -> Int
        f (SaxElementOpen name _ : rest) i = f rest i
        f (_ : rest) i = f rest i
        f [] i = i

Thanks for you thoughts!

Daniil Elovkov

More information about the Haskell-Cafe mailing list