Ale*_*Ott 10 xml parsing haskell
我正在尝试编写一些应用程序,它执行数据分析,存储在相当大的XML文件中(从10到800MB).每组数据都存储为单个标记,具体数据指定为attrobutes.我目前是来自HaXml的saxParse,我对使用它时的内存使用情况不满意.在解析15Mb XML文件时,它消耗了超过1Gb的内存,尽管我试图不在列表中存储数据,并立即处理它.我使用以下代码:
importOneFile file proc ioproc = do
xml <- readFile file
let (sxs, res) = saxParse file $ stripUnicodeBOM xml
case res of
Just str -> putStrLn $ "Error: " ++ str;
Nothing -> forM_ sxs (ioproc . proc . (extractAttrs "row"))
Run Code Online (Sandbox Code Playgroud)
其中'proc' - 执行将数据从属性转换为记录的过程,以及'ioproc' - 执行某些IO操作的过程 - 输出到屏幕,存储在数据库中等.
如何在XML解析期间减少内存消耗?应该切换到另一个XML解析器帮助吗?
更新:哪个解析器支持不同的输入编码 - utf-8,utf-16,utf-32等?
如果您愿意假设您的输入有效,请考虑从Galois人那里查看TagSoup或Text.XML.Light.
它们将字符串作为输入,因此您可以(间接)向它们提供Data.Encoding理解的任何内容,即