이것은 약간 까다 롭습니다. 먼저 this previous question에 설명 된대로 부모 요소를 가져와야합니다.
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)
가 * 내가 정확하게 ... 당신이 어떤 버그를 발견하면 알려 주시기이 코드를 테스트하지 않습니다. 내 경험에
정상적으로 작동하는 것 같습니다. 대신에 이중 반복을 수행하는 변형을 시도했지만 모든 부모를 반복하고 자식의 내부 루프를 반복합니다. 나는 두 번째/나중의 패스가 모든 부모를 설정하지 않았을 수 있기를 원하지 않았다. –