Java 在Jython中解析大型XML文档的最佳方法
我需要从Jython解析一个大的(>800MB)XML文件。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.
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。有一个项目可以解决这个问题,但不确定它的最新程度。