Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python 3 ElementTree更改特定的xml元素_Python_Xml_Python 3.x_Elementtree - Fatal编程技术网

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

使用Python 3 ElementTree更改特定的xml元素,python,xml,python-3.x,elementtree,Python,Xml,Python 3.x,Elementtree,我有一组xml格式的元数据文件,定期更新,我正在尝试自动化。 我已经研究了如何在xml的所需元素中以间接方式查找并替换文本,但我认为必须有一种直接的方法来访问和更改元素。我就是想不出来 元数据xml的格式为: <?xml version="1.0" ?> <metadata xml:lang="en"> <Esri> <CreaDate>20120405</CreaDate>

我有一组xml格式的元数据文件,定期更新,我正在尝试自动化。 我已经研究了如何在xml的所需元素中以间接方式查找并替换文本,但我认为必须有一种直接的方法来访问和更改元素。我就是想不出来

元数据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>

以更好的方式欣赏想法。

我只会在循环完成后才写入文件:

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')

测试了两种简单的方法,都有效

第一:

第二:

我更喜欢第一个,我认为它更可读

for child in root:
    for xel in child.iter('idPurp'):
        xel.text = 'Downloaded :: ' + time.strftime('%y%m%d_%H%M%S')
import xml.etree.ElementTree as ET
from time import strftime

xmlfile = 'metadata.xml'
tree = ET.parse(xmlfile)
root = tree.getroot()

xel = root.find('./dataIdInfo/idPurp')
xel.text = 'Downloaded :: ' + strftime('%y%m%d_%H%M%S')

tree.write(xmlfile)
import xml.etree.ElementTree as ET
from time import strftime

xmlfile = 'metadata.xml'
tree = ET.parse(xmlfile)
root = tree.getroot()

xel = root[1][0]
xel.text = 'Downloaded :: ' + strftime('%y%m%d_%H%M%S')

tree.write(xmlfile)