2016-08-03 5 views
1

Мне нужно извлечь определенные данные из XML-файлов, но также знать позицию, в которой выделенный элемент находился в исходном файле XML, - как смещение символов от начала файла, или номер строки + позиция в этой строке.Анализ XML в python при сохранении ссылки на позицию в исходном файле

Обычно используемые библиотеки XML python, похоже, не предоставляют таких функций.

Существует аналогичный вопрос Obtaining position info when parsing HTML in Python, который был решен путем написания пользовательской оболочки вокруг html5lib; но эта библиотека не будет работать для меня, поскольку конкретные данные не являются HTML.

Существуют ли синтаксические анализаторы XML, которые сохраняют информацию о позиции элемента, или мне нужно прокрутить мой собственный синтаксический анализ для этого?

+0

lxml имеет 'sourceline', но это только дает вам номер строки – gsnedders

ответ

0

Я не думаю, что такие вещи существуют. Большинство парсеров сначала анализируют (манипулируют текстовым потоком в токенах, а затем анализируют его на дерево). К тому времени они обычно хорошо знают, где они находятся в исходном потоке (это необходимо для вывода ошибок синтаксического анализа). Однако, как только дерево объектов было построено, эта информация мало используется и больше не доступна для результирующих объектов.

Приятным и уродливым взломом (в то же время!) Было бы токенизировать вход XML, добавить атрибут «позиция», ссылающийся на исходную позицию потока, проанализировать XML с помощью обычной библиотеки и использовать этот атрибут (ы) позже для информации пользователя ...

Сообщите нам, как вы это сделали!