#python #iterator #lxml #tree-traversal
#python #итератор #lxml #обход дерева
Вопрос:
Я не уверен в названии точного типа обхода, который я хочу выполнить, но в основном я хочу читать документ элемент за элементом в обратном порядке от текущего элемента.
iterdescendants()
Метод, похоже, ничего не делает, и iterancestors()
метод не входит в подэлементы, он просто переходит вверх и вниз, если вы понимаете, что я имею в виду.
Комментарии:
1. Можете ли вы привести пример? Как будет выглядеть входной XML и в каком порядке будут проходить элементы?
Ответ №1:
Может быть, что-то вроде этого?
import lxml.etree as et
xmldata = """
<data>
<mango>1</mango>
<kiwi>2</kiwi>
<banana>3</banana>
<plum>4</plum>
</data>
"""
tree = et.fromstring(xmldata)
el = tree.find('plum')
print el.text
while True:
el = el.getprevious()
if el is None:
break
print el.text
Результат:
4 3 2 1
Комментарии:
1. Это не работает. Я не думаю, что я объяснил это слишком хорошо изначально, но в основном он должен getprevious , и если getprevious равно None, он должен getparent , если getoarent равно none, он должен возвращать None . Я написал простую функцию для обработки этого, но это похоже на то, что должно быть встроено, и я ненавижу изобретать колеса.