2013-05-12 1 views
0

XML 문서에서 여러 값을 변경하려고합니다. 나는 몇 가지 다른 것들을 시도했지만 아무것도 변경하지 않는 것 같지만 수정 시간이 변경되었지만 값이 변하지 않았기 때문에 파일에 액세스하는 것처럼 보입니다.xml 파일의 값 변경

from xml.etree import ElementTree as et 
import os 
import xml 

path = os.path.expanduser(r'~\AppData\Roaming\etc\etc\somefile.xml') 
et = et.parse(path) 

for name in et.findall('name'): 
    if name == 'sometext1': 
     name.text = "sometext2" 
et.write(path) 

둘째이 시도하지만 난 AttributeError를 얻을 : 'STR'개체가 어떤 속성 '텍스트'

사람이 필자가 사라 조언한다 수

with open(path,'r+') as f: 
tree = et.parse(f) 

for node in tree.iter('favourite'): 
name = node.attrib.get('name') 

if name == 'sometext1': 
    name.text = "sometext2" 
tree.write(path) 
잘못

+0

는'name'이 요소의 이름을 사용합니다. 'node'는 요소입니다. – Blender

답변

0
  • 라인이 없습니다

    et = et.parse(path) 
    

    은 012 왼쪽에는 왼쪽에 변수 이름으로 된이 오른쪽에 있습니다. 이 시점 이후에, ElementTree 모듈에 액세스하는 것은 불가능합니다 (또는 적어도 지나치게 어렵습니다). . 따라서 et을 모호하게하십시오. 예를 들어 ET을 모듈로하고 treeElementTree이라고합시다.

  • for 루프에서 name은 요소이므로 name과 문자열을 비교하는 것은 항상 거짓입니다. 대신

    name.text == 'sometext1' 
    

from xml.etree import ElementTree as ET 
import os 

path = os.path.expanduser(r'~\AppData\Roaming\etc\etc\somefile.xml') 
tree = ET.parse(path) 

for name in tree.findall('name'): 
    if name.text == 'sometext1': 
     name.text = "sometext2" 
     print(name) # for debugging only 
tree.write(path) 
+0

이러한 변경을 시도했지만 xml 파일에는 아무런 변화가 없습니다. – Syborg

+0

'tree.findall ('name')'이 요소를 찾고 있습니까? 루프에'print' 문을 두어 요소가 발견되는지 확인할 수 있도록하십시오. ([] 요소를 찾을 수없는 이유 중 하나는 [네임 스페이스] (http://en.wikipedia.org/wiki/XML_namespace)에서 참조해야 할 수 있기 때문입니다. – unutbu