我需要使用将1 GB XML文件中的一些数据提取到表中 ets和dets。 我搜索整个网络,也在这里,但我没有找到任何简单的例子 关于如何处理大型XML文件。 首先,我只想了解如何在不将整个文件上传到内存中的情况下阅读文件。
日Thnx。
答案 0 :(得分:3)
lib
,这是所有内置应用程序所在的位置。重命名其提取文件夹,如下所示:erlsom-1.0
。在Emakefile
文件夹中创建名为erlsom-1.0
的文件。把它放在那个文件里并保存。 {"src/*", [verbose,report,warn_obsolete_guard,{outdir, "ebin"}]}.erlsom-1.0文件夹应如下所示:
erlsom-1.0其他文件并不重要。现在,打开一个erlang shell,其
|-doc/
|-ebin/
|-examples/
|-include/
|-src/
|-Emakefile
pwd()
正在查看erlsom-1.0
文件夹。像这样Eshell V5.9 (abort with ^G) 1> make:all(). Recompile: src/ucs Recompile: src/erlsom_writeHrl Recompile: src/erlsom_write Recompile: src/erlsom_ucs Recompile: src/erlsom_simple_form Recompile: src/erlsom_sax_utf8 Recompile: src/erlsom_sax_utf16le Recompile: src/erlsom_sax_utf16be Recompile: src/erlsom_sax_list Recompile: src/erlsom_sax_lib Recompile: src/erlsom_sax_latin1 Recompile: src/erlsom_sax Recompile: src/erlsom_pass2 Recompile: src/erlsom_parseXsd Recompile: src/erlsom_parse Recompile: src/erlsom_lib Recompile: src/erlsom_compile Recompile: src/erlsom_add Recompile: src/erlsom up_to_date 2>运行功能:
make:all().
所以,它完成了。因此,如果文件夹erlsom-1.0
位于您的erlang lib
中,那么您可以从任何可能具有pwd()
的erlang shell调用erlsom方法。
答案 1 :(得分:0)
您检查了xmerl library吗?
答案 2 :(得分:0)
为了阅读大文件而不将其完全加载到内存中,您可以使用file:open/2,执行以下操作:
{ok, FileHandler} = file:open(File, [read, raw, read_ahead]),
{ok, Line} = file:read_line(FileHandler)
另外,对于使用XML,在Erlang中你有xmerl,遗憾的是,它很难记录。
答案 3 :(得分:-1)
我不知道Erlang,但似乎可以集成C库。如果您愿意走这条路,我建议您查看expat库。它是我所知道的快速,轻量级的xml解析器库。一个简单的回调机制调用每个xml元素的代码,您可以自己决定是将它保留在内存中还是想要跳过它。
我知道,这是非常低级的。但是对于非常大的数据,遗憾的是,这通常是唯一的方法。
以下是我发现谷歌搜索的内容:http://dudefrommangalore.blogspot.de/2009/04/erlang-xml-parser-comparison.html