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

Java 在Jython中解析大型XML文档的最佳方法,java,python,xml,jython,xom,Java,Python,Xml,Jython,Xom,我需要从Jython解析一个大的(>800MB)XML文件。XML不是深度嵌套的,包含大约一百万个相关元素。我需要将这些元素转换成真实的对象 我以前成功地使用过nu.xom.*,但现在我已经从Java切换到Jython,库失败,并显示以下消息: 解析器遇到了多个问题 本公司“64000”实体扩展 文件;这是法律规定的限制 应用程序 我还没有找到解决这个问题的方法,所以我可能不得不寻找另一个XML库。它可以是Java或Jython兼容的Python,并且应该是高效的。Pythonic会很棒,nu.

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

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

解析器遇到了多个问题 本公司“64000”实体扩展 文件;这是法律规定的限制 应用程序


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

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

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

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

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

听起来你达到了默认的扩展限制。 见本说明:

您需要将系统属性“entityExpansionLimit”设置为更改 默认值


(添加)另请参见我尝试的
xml.sax
,现在我遇到了以下错误:
xml.sax.\u exceptions.SAXParseException::1:1:解析器在此文档中遇到了超过“64000”个实体扩展;这是应用程序施加的限制。
@clstaudt:为什么要接受给出此类错误消息的答案?因为建议本身是合理的,而错误消息是一个单独的问题。当然,现在还有其他合理的建议,我的问题可能没有一个答案。我本来打算建议BeautifulSoup,但在Jython的领导下,这似乎运行得慢得令人费解。Jython似乎不支持etree。有一个项目可以解决这个问题,但不确定它的最新程度。