用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
上面的错误信息应该工作。
好的,谢谢你的回答。 lxml工作正常,元素具有sourceline属性。 但在我的旧机器上,lxml相比cElementTree相对较慢(从25%到50%,取决于输入文件) – ThibThib 2009-08-09 13:53:27
http://codespeak.net/lxml/performance.html。加载速度较慢,然后解析cElementTree,但在树遍历和序列化时更快。 – 2009-08-09 15:04:25
sourceline是在巨大文件中处理错误的好帮手!谢谢 :) – 2012-05-17 11:19:52