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