用cElementTree解析python中的XML文件:处理文件中的错误和行号

用cElementTree解析python中的XML文件:处理文件中的错误和行号

问题描述:

我正在使用cElementTree库来解析Python中的XML文件。 一切工作正常用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文件中的位置?

感谢

,你应该使用的等效库是lxml。LXML是非常快速的C的包装图书馆libxml2和的libxslt并且通常认为优于内置的。

它,幸运的是,试图保持元素树api并将其扩展为lxml.etree。

lxml.etree对于所有元素都有一个属性源代码行,这正是您所追求的。

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

+0

好的,谢谢你的回答。 lxml工作正常,元素具有sourceline属性。 但在我的旧机器上,lxml相比cElementTree相对较慢(从25%到50%,取决于输入文件) – ThibThib 2009-08-09 13:53:27

+0

http://codespeak.net/lxml/performance.html。加载速度较慢,然后解析cElementTree,但在树遍历和序列化时更快。 – 2009-08-09 15:04:25

+0

sourceline是在巨大文件中处理错误的好帮手!谢谢 :) – 2012-05-17 11:19:52