【问题标题】:Efficient Parser for large XMLs大型 XML 的高效解析器
【发布时间】:2013-06-10 06:25:49
【问题描述】:

我有非常大的 XML 文件要处理。我想将它们转换为具有颜色、边框、图像、表格和字体的可读 PDF。我的机器中没有很多资源,因此,我需要我的应用程序是非常优化的寻址内存和处理器。

我做了一个简单的研究来确定要使用的技术,但我无法确定哪种编程语言和 API 最适合我的要求。我认为 DOM 不是一种选择,因为它会消耗大量内存,但是,带有 SAX 解析器的 Java 会满足我的要求吗?

有些人还推荐使用 Python 进行 XML 解析。有那么好吗?

非常感谢您的善意建议。

【问题讨论】:

  • Python 有一个非常简单而强大的库,称为 BeautifulSoup,它非常适合 XML 解析。
  • 非常感谢 karthikr。 Beautifulsoup 对记忆力温和、速度快吗?
  • 请量化“非常大”。工程师会寻求帮助在“非常宽”的河流上建造一座桥吗?有人敢在不知道这条河实际上有多宽的情况下提出建议吗?我听说人们将 1Mb 称为非常大。 1Mb 的解决方案与 1Gb 完全不同。一般来说,如果现在供人类使用的文档太大而无法存储在内存中,我会感到惊讶 - 除非有很多图像。
  • 谢谢你迈克尔! .. 我想处理大约 200K 个 XML,每个文件大约 2 MB。稍后我会考虑您的建议。
  • 你看过vtd-xml (vtd-xml.sf.net)

标签: java python xml parsing sax


【解决方案1】:

SAX 是非常好的解析器,但它已经过时了。

最近 Oracle 推出了新的 Parser 来高效地解析 xml 文件,称为 Stax

*http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html*

附加链接还将显示所有解析器的比较以及内存利用率及其功能。

谢谢, 帕万

【讨论】:

    【解决方案2】:

    是的,我认为 Sax 适合你。 Dom 不适合大型 XML 文件,因为它将整个 XML 文件保存在内存中。你可以看到我在我的博客here写的一个比较

    【讨论】:

      【解决方案3】:

      不确定您是否有兴趣使用Perl,但如果您愿意,以下都是不错的选择:LibXMLLibXSLTXML-Twig,这也适用于文件大到适合内存(LibXML::Reader 也是如此)。当然,SAX 在那里,但它可能很慢。大多数人推荐前两个选项。最后,CPAN 是一个很棒的来源,拥有非常活跃的社区。​​p>

      【讨论】:

        【解决方案4】:

        如果你想要最好的 DOM 而没有它的内存开销,vtd-xmlbest 的赌注,这就是证明...

        http://recipp.ipp.pt/bitstream/10400.22/1847/1/ART_BrunoOliveira_2013.pdf

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-19
          • 2015-01-20
          • 2018-11-26
          • 1970-01-01
          • 2011-05-09
          • 2014-06-15
          相关资源
          最近更新 更多