2017-01-22 4 views
0

태그 속성을 올바른 값으로 바꾸어 XML 파일을 정리하려고합니다.ElementTree 태그 속성 바꾸기 및 업데이트 파일

아래 코드를 실행하면 태그 속성이 업데이트되지만 요소 트리 태그 객체에서만 XML 파일이 업데이트/저장되지 않습니다.

ET.iterparse 내에서 XML 개체에 대한 변경 사항을 업데이트하거나 저장하는 방법이 있습니까? 루프 내에서 모든 태그 속성 값을 변경 한 후 파일을 업데이트하는 방법이 있습니까?

변경 전후에 tag.attrib [ 'v']를 출력하면 올바른 값으로 올바르게 업데이트됩니다. 그러나 저장된 XML 파일은 이러한 변경 사항을 반영하지 않습니다.

내가 발견 한 모든 솔루션은 ET.iterparse 메서드를 사용하지 않습니다. 나는 꽤 큰 파일로 작업하고 ET.iterparse의 사용법을 유지하고 싶습니다.

사용 :

  • 파이썬 2.7
  • xml.etree.cElementTree에게

감사합니다. 당신이 할 수있는 ElemetTree

def writeClean(self, cleaned_streets): 
    ''' 
    Get cleaned streets mapping dictionary and use that dictionary to find 
    and replace all bad street name tag attributes within XML file. 

    Iterate through XML file to find all bad instances of tag attribute 
    street names, and replace with correct mapping value from cleaned_streets 
    mapping dictionary. 

    ''' 
    with open(self.getSampleFile(), 'r+') as f:    
     for event, elem in ET.iterparse(f, events=('start',)): 
      if elem.tag == 'node' or elem.tag == 'way': 
       for tag in elem.iter('tag'): 
        if self.isStreetName(tag): 
         street = tag.attrib['v'] 
         if street in cleaned_streets.keys(): 
          tag.attrib['v'] = cleaned_streets[street] 

답변

0

사용 :

def __update_cfg_file(self): 
    try: 
     tree = ET.parse(self._config_file_path) 
     root = tree.getroot() 
     add_file_element = "./input/additional-files" 

     root.find(add_file_element).attrib["value"] = "additional-files" 

     tree.write(self._config_file_path) 

    except IOError: 
     sys.exit("Something went wrong while opening %s" 
       % (self._config_file_path)) 
: 예를 들어

tree = ET.parse(file_path) 
    # Do some modification to your file 
    tree.write(file_path) 

내가 좋아하는 것입니다 코드의 조각을