使用Python 3更改特定的xml元素ElementTree

问题描述:

我有一组定期更新的xml元数据文件,我试图自动化。 我已经找出了如何迭代查找,然后替换所需的XML元素中的文本,但认为必须有直接的方式来访问和更改元素。我只是无法解决问题。使用Python 3更改特定的xml元素ElementTree

元数据的XML的格式:

<?xml version="1.0" ?> 
    <metadata xml:lang="en"> 
     <Esri> 
      <CreaDate>20120405</CreaDate> 
      <CreaTime>13113000</CreaTime> 
      <ArcGISFormat>1.0</ArcGISFormat> 
      <SyncOnce>TRUE</SyncOnce> 
      <ModDate>20121129</ModDate> 
      <ModTime>11433300</ModTime> 
      <ArcGISProfile>ItemDescription</ArcGISProfile> 
     </Esri> 
     <dataIdInfo> 
      <idPurp>Updated :: 121129_114038</idPurp>  
     </dataIdInfo> 
    </metadata> 

我的迭代方法是:赞赏有更好的方式

for child in root: 
    for xel in child.iter('idPurp'): 
     download_new_datetime = strftime('%y%m%d_%H%M%S') 
     download_new_text = 'Downloaded :: ' 
     xel.text = download_new_text + download_new_datetime 
     tree.write(xmlfile) 

思想。

我会写只有一次,我与循环中完成的文件:

import xml.etree.ElementTree as ET 
from time import strftime 

xmlfile = '/tmp/file' 
tree = ET.parse(xmlfile) 
root = tree.getroot() 

for child in root: 
    for xel in child.iter('idPurp'): 
     download_new_datetime = strftime('%y%m%d_%H%M%S') 
     download_new_text = 'Downloaded :: ' 
     xel.text = download_new_text + download_new_datetime 

tree.write(xmlfile) 

我甚至会进一步简化环路:

for child in root: 
    for xel in child.iter('idPurp'): 
     xel.text = 'Downloaded :: ' + time.strftime('%y%m%d_%H%M%S')