Это немного сложно. Во-первых, вам нужно получить родительский элемент, как описано в предыдущем вопросе.
parent_map = dict((c, p) for p in tree.getiterator() for c in p)
Если вы можете получить уценку для использования lxml
, это немного проще — я считаю, что элементы lxml
уже знают своих родителей.
Теперь, когда вы получаете свой элемент от итерации, вы также можете получить родителя:
for elem in list(tree.getiterator('pre')):
parent = parent_map[elem]
wrap_elem(parent, elem)
Обратите внимание, что я превратил итератор из дерева в список — мы не хотим изменять дерево во время итерации по нему. Это может быть проблемой.
Наконец, вы можете перемещать элемент:
def wrap_elem(parent, elem)
parent_index = list(parent).index(elem)
parent.remove(elem)
new_elem = ET.Element('div', attrib={'class': 'wrapper'})
parent.insert(parent_index, new_elem)
new_elem.append(elem)
*Обратите внимание, что я точно не тестировал этот код... дайте мне знать, если вы обнаружите какие-либо ошибки.
person
mgilson
schedule
05.01.2014