在Jython中解析大型XML文档的最佳方法

时间:2011-02-23 16:50:30

标签: java python xml jython xom

我需要从Jython解析一个大的(> 800MB)XML文件。 XML没有深度嵌套,包含大约一百万个相关元素。我需要将这些元素转换为实际对象。

之前我已经成功使用过nu.xom.*,但是现在我已经从Java切换到Jython,库失败并显示以下消息:

  

解析器遇到了多个   “64,000”实体扩张   文献;这是强加的限制   申请。

我还没有找到解决这个问题的方法,所以我可能需要寻找另一个XML库。它可以是Java或Jython兼容的Python,应该是高效的。 Pythonic会很棒,nu.xom.*很简单,但不是很pythonic。你有什么建议吗?

4 个答案:

答案 0 :(得分:4)

Sax是解析大型文档的最佳方式。

听起来你达到了默认的扩展限制。 请参阅此说明:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4843787

您需要设置系统属性“entityExpansionLimit”进行更改 默认。

(已添加)另请参阅answer to this question.

答案 1 :(得分:3)

尝试使用SAX解析器,它非常适合流式传输大型XML文件。

答案 2 :(得分:3)

jython是否支持xml.etree.ElementTree?如果是这样,请使用iterparse方法来降低内存大小。阅读this并按照描述使用elem.clear()。

答案 3 :(得分:0)

有一个 lxml python库,它可以解析大文件,而无需将数据加载到内存中。 但我不知道我是否兼容jython