【发布时间】:2013-12-22 10:23:50
【问题描述】:
我有一个大的 XML 文件 (3 MB+),我有一个 XSD 来验证它。
我正在使用 python 和 LXML。我从这个脚本开始。哪个验证很好,包括给我行号。但问题是文件在一行上,所以当我验证时,我得到的只是第 1 行显示的错误。当我使用漂亮的打印为我拆分行时,它在第 65535 行达到最大值。
谢谢!
【问题讨论】:
标签: python xml xsd-validation
我有一个大的 XML 文件 (3 MB+),我有一个 XSD 来验证它。
我正在使用 python 和 LXML。我从这个脚本开始。哪个验证很好,包括给我行号。但问题是文件在一行上,所以当我验证时,我得到的只是第 1 行显示的错误。当我使用漂亮的打印为我拆分行时,它在第 65535 行达到最大值。
谢谢!
【问题讨论】:
标签: python xml xsd-validation
Pretty-print your XML 添加换行符。然后通过您的验证器获取更有用的行号。
编辑:在重新阅读您的问题时,我发现您已使用 Notepad++ 添加换行符。但是在验证 XML 时,LXML 显然有大小限制。
有关此问题的一般方法,请参阅Validating a HUGE XML file。特别是,accepted answer 开头为:
不要使用 DOMParser,而是使用 SAXParser。这从一个 输入流或阅读器,以便您可以将 XML 保存在磁盘上,而不是 将其全部加载到内存中。
基本上,您需要使用 SAX 提供的流方法。因此,如果您的要求是必须在 Python 中验证您的文件,那么您需要找到基于流的验证方法。 (也许 LXML 以流方式提供验证?)
但是,如果您的验证要求更加灵活,请考虑使用专门的工具,例如 XMLStarlet。
例如,以下是根据来自XMLStarlet entry on Wikipedia 的 XSD 验证 XML 文件的方法:
xmlstarlet val -e -s my.xsd my.xml
以及使用XMLStarlet on very large files的证明。
【讨论】: