我需要从Jython解析一个大的(> 800MB)XML文件。 XML没有深度嵌套,包含大约一百万个相关元素。我需要将这些元素转换为实际对象。
之前我已经成功使用过nu.xom.*
,但是现在我已经从Java切换到Jython,库失败并显示以下消息:
解析器遇到了多个 “64,000”实体扩张 文献;这是强加的限制 申请。
我还没有找到解决这个问题的方法,所以我可能需要寻找另一个XML库。它可以是Java或Jython兼容的Python,应该是高效的。 Pythonic会很棒,nu.xom.*
很简单,但不是很pythonic。你有什么建议吗?
答案 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