парсинг XML-файла в python с помощью cElementTree: работа с ошибками и номером строки в файле - PullRequest
2 голосов
/ 09 августа 2009

Я использую библиотеку cElementTree для анализа XML-файлов в Python. Все отлично работает

Но я хотел бы предоставить пользователю полные сообщения об ошибках, если значение в 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 голосов
/ 09 августа 2009

Эквивалентная библиотека, которую вы должны использовать: lxml . lxml - это оболочка для очень быстрых библиотек c libxml2 и libxslt и, как правило, считается лучше встроенных.

К счастью, он пытается сохранить API дерева элементов и расширить его в lxml.etree.

У lxml.etree есть атрибут sourceline для всех элементов, который вам нужен.

Так что elem.sourceline выше в сообщении об ошибке должно работать.

...