2016-12-01 5 views
0

저는 파이썬의 xml.etree.ElementTree 라이브러리를 약간 다루었습니다. 대부분이 파일을 가지고 놀았습니다. 나는 파이썬이 파일을 메모리에로드하고 편집 한 다음 플러시하고 편집되지 않은 버전을 계속 사용하는 것으로 나타났습니다. 예를 들어, 내 프로그램에서 요소를 XML 파일에 추가 한 다음 해당 XML 파일을 반복 할 경우 이전에 만든 추가 내용을 볼 수 없습니다. 파일에 추가하기위한Python의 ElementTree에서 파일 새로 고침

:

import xml.etree.ElementTree as ET 
tree = et.parse("file.xml") 
root = tree.getroot() 
newel = ET.Element("element", tag=foo,) 
newel.text = bar 
root.append(newel) 
tree.write("file.xml") 
for child in root: 
     if child.get("tag") == foo: 
      print(child.text) 

내가 그렇게 말하자면, 뭔가 잘못하고, 또는 무엇 '상쾌'의 좋은 방법입니다 오전

여기 내 코드의 압축 된 버전입니다 프로그램의 XML 파일이므로 for 루프로 프로그램을 반복 할 때 새로운 요소를 볼 수 있습니까?

저는 파이썬 3.5를 사용하고 있습니다.

+0

[이] (HTTP :/당신이 tag을 원하는 가정하면 요소 속성으로는 (일부 추가 수정과) 작업을해야 다음 (당신이 Element.get으로 검색을 시도하는 방법에 따라) /stackoverflow.com/questions/27829575/python-refresh-file-from-disk), 적용되지 않는 것 같습니다. – prongs95

답변

0

이것은 새로 고침 또는 내뿜기와 관련이 없습니다. 요소 생성자의 서명은 다음과 같습니다 당신은 추가로 명명 된 인수로 tag에 전달하는

__init__(self, tag, attrib={}, **extra) 

암시 "element"로 지정 할 수 있습니다. 내가 본

foo = "foo" 
bar = "bar" 

import xml.etree.ElementTree as ET 
tree = ET.parse("file.xml") 
root = tree.getroot() 
newel = ET.Element("element", {"tag": foo}) 
newel.text = bar 
root.append(newel) 
tree.write("file.xml") 
for child in root: 
     if child.get("tag") == foo: 
      print(child.text) 
+0

이렇게하면 문제가 해결됩니다. 감사! – prongs95