用cElementTree解析python中的XML文件:处理文件中的错误和行号
我正在使用用cElementTree解析python中的XML文件:处理文件中的错误和行号,python,error-handling,line-numbers,celementtree,Python,Error Handling,Line Numbers,Celementtree,我正在使用cElementTree库解析Python中的XML文件。 一切正常 但我想在XML中的值不正确时为用户提供完整的错误消息 例如,假设我有以下XML: <A name="xxxx" href="yyyy"/> 我的例外情况在某处被发现 但是,另外,我想显示文件中XML元素的行号。似乎cElementTree没有存储关于树的XML元素行号的任何信息…:-( 问题:是否有一个等效的XML库能够做到这一点? 还是访问XML文件中XML元素位置的方法 谢谢您应该使用的等效库是.l
cElementTree
库解析Python中的XML文件。
一切正常
但我想在XML中的值不正确时为用户提供完整的错误消息
例如,假设我有以下XML:
<A name="xxxx" href="yyyy"/>
我的例外情况在某处被发现
但是,另外,我想显示文件中XML元素的行号。似乎cElementTree
没有存储关于树的XML元素行号的任何信息…:-(
问题:是否有一个等效的XML库能够做到这一点?
还是访问XML文件中XML元素位置的方法
谢谢您应该使用的等效库是.lxml,它是非常快速的c库libxml2和libxslt的包装器,通常被认为优于内置库 幸运的是,它试图保持元素树api,并在lxml.etree中对其进行扩展 对于所有元素,lxml.etree都有一个属性sourceline,这正是您所追求的
因此,错误消息中的
elem.sourceline
应该可以工作。好的,谢谢您的回答。lxml工作正常,元素具有sourceline属性。但是在我的旧机器上,lxml与cElementTree相比速度相对较慢(根据输入文件的不同,从25%到50%)。它的加载、解析速度比cElementTree慢,但在树遍历和序列化方面更快。sourceline是大文件中错误处理的一个很好的补充!谢谢:)
if elem.get("ref") not in myList:
raise XMLException( elem, "the 'href' attribute is not valid or does not exist")