使用cElementTree在Python中解析XML文件:处理错误和行号

2 投票
1 回答
1570 浏览
提问于 2025-04-15 13:28

我正在使用 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 应该可以正常工作。

撰写回答