2014-11-04 1 views
0

lxml을 사용하여 xml 파일을 열고 xml을 편집 한 다음 다른 버전을 저장하려고합니다. 그러나 작동시키지 못합니다. 첫 번째 저장은 섹션을 제거하기위한 것이지만 두 번째 저장은 남겨두기위한 것입니다. 현재 save 1은 섹션을 올바르게 제거하지만 2는 저장합니다. 다음 코드 예제이다파이썬 lxml - 트리의 다른 포크 만들기

from lxml import etree 
parser = etree.XMLParser(remove_blank_text=True) 
tree = etree.parse(pathToXmlFile, parser) 
root = tree.getroot() 

etree1 = etree 
tree1 = tree 
etree1.strip_elements(tree1, 'products') 
tree1.write(pathToXmlFileOut1, pretty_print = True, xml_declaration = True, encoding = 'UTF-8') 

etree2 = etree 
tree2 = tree 
tree2.write(pathToXmlFileOut2, pretty_print = True, xml_declaration = True, encoding = 'UTF-8') 

답변

1

문제는 tree1tree2은 (메모리에 동일한 객체를 가리키는) 같은 객체는 것이다. 따라서 다른 변수를 수정하지 않고 하나의 변수를 수정할 수 없습니다. 예에서 :

print tree1 == tree2 # True 
print tree1 is tree2 # True 

아마 당신은 그것을 수정하지 않고 처음 tree2을 절약 할 수 다음 수정과 tree1을 저장합니다. 또는 복사 기능을 사용하여 두 개의 다른 개체를 만들 수도 있습니다.

+0

감사합니다. tree1 = treat를 사용하는 copy.deepcopy (tree)를 사용했습니다. – speedyrazor

관련 문제