使用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 文件中的位置?
谢谢
1 个回答
4
你应该使用的相应库是 lxml。lxml 是一个封装了非常快速的 C 语言库 libxml2 和 libxslt 的工具,通常被认为比内置的库更好。
幸运的是,它努力保持与元素树 API 的一致性,并在 lxml.etree 中进行了扩展。
lxml.etree 中的每个元素都有一个叫做 sourceline 的属性,这正是你需要的。
所以在错误信息中提到的 elem.sourceline
应该可以正常工作。