【问题标题】:xsd validation, get the object that is invalidxsd验证,获取无效的对象
【发布时间】:2013-12-22 10:23:50
【问题描述】:

我有一个大的 XML 文件 (3 MB+),我有一个 XSD 来验证它。

我正在使用 python 和 LXML。我从这个脚本开始。哪个验证很好,包括给我行号。但问题是文件在一行上,所以当我验证时,我得到的只是第 1 行显示的错误。当我使用漂亮的打印为我拆分行时,它在第 65535 行达到最大值。

谢谢!

【问题讨论】:

    标签: python xml xsd-validation


    【解决方案1】:

    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的证明。

    【讨论】:

    • 虽然这确实是一个有效的解决方法,但我仍然更喜欢这个对象,但我可以使用它,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多