lxml, xi: include и оригинальный файл

1

Я использую lxml для анализа файла, содержащего элементы xi: include, и я разрешаю include, используя xinclude().

Учитывая элемент, есть ли способ идентифицировать строку файла и источника, из которой первоначально появился элемент?

Например:

from lxml import etree
doc = etree.parse('file.xml')
doc.xinclude()
xpath_expression = ...
elt = doc.xpath(xpath_expression)
# Print file name and source line of 'elt' location
Теги:
lxml
xinclude

1 ответ

0

Расширение xinclude добавит атрибут xml: base к расширенному элементу верхнего уровня, а также elt.base и elt.sourceline также будут обновлены для дочерних узлов, так что:

print elt.base, elt.sourceline

даст вам то, что вы хотите.

Если elt не является частью расширения xinclude, то elt.base укажет на базовый документ ('file.xml'), а elt.sourceline будет номером строки в этом файле. (Обратите внимание, что sourceline обычно, по-видимому, указывает на строку, где заканчивается тег элемента, а не на строку, где он начинается, если элемент находится на нескольких строках, точно так же, как сообщения об ошибках проверки обычно указывают на закрывающий тег, где возникает ошибка. )

Вы можете найти начальные элементы, включенные в xincluded, и проверить это с помощью:

xels = doc.xpath( '//*[@xml:base] )
for x in xels: 
     print x.tag, x.base, x.sourceline
     for c in x.getchildren():
             print c.tag, c.base, c.sourceline

Ещё вопросы

Сообщество Overcoder
Наверх
Меню