Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用cElementTree解析python中的XML文件:处理文件中的错误和行号_Python_Error Handling_Line Numbers_Celementtree - Fatal编程技术网

用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")