【问题标题】:parsing XML file in python with cElementTree: dealing with errors and line number in the file使用 cElementTree 在 python 中解析 XML 文件:处理文件中的错误和行号
【发布时间】:2010-11-18 00:33:07
【问题描述】:

我正在使用cElementTree 库在 Python 中解析 XML 文件。 一切正常

但是当 XML 中的值不正确时,我想为用户提供完整的错误消息。

例如,假设我有以下 XML:

<A name="xxxx" href="yyyy"/>

并想告诉用户href 属性是否不存在或具有不在给定列表中的值。

目前,我有类似的东西

if elem.get("ref") not in myList:
    raise XMLException( elem, "the 'href' attribute is not valid or does not exist")

我的异常在某处被捕获。

但是,另外,我想在文件中显示 XML 元素的行号。似乎cElementTree 没有存储有关树的 XML 元素的行号的任何信息... :-(

问题:是否有等效的 XML 库能够做到这一点? 还是一种访问 XML 文件中 XML 元素位置的方法?

谢谢

【问题讨论】:

    标签: python error-handling line-numbers celementtree


    【解决方案1】:

    您应该使用的等效库是lxml。 lxml 是非常快速的 c 库 libxml2 和 libxslt 的包装器,通常被认为优于内置库。

    幸运的是,它尝试保留元素树 api 并在 lxml.etree 中扩展它。

    lxml.etree 具有所有元素的属性源代码,这正是您所追求的。

    所以上面错误消息中的elem.sourceline应该可以工作。

    【讨论】:

    • 好的,谢谢您的回答。 lxml 工作正常,并且该元素具有 sourceline 属性。但是在我的旧机器上,与 cElementTree 相比,lxml 相对较慢(从 25% 到 50% 慢,具体取决于输入文件)
    • codespeak.net/lxml/performance.html。它在加载、解析方面比 cElementTree 慢,但在树遍历和序列化方面更快。
    • sourceline 是对大文件错误处理的一个很好的补充!谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    相关资源
    最近更新 更多