使用python3elementt更改特定的xml元素

2024-10-03 13:24:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组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>

我的迭代方法是:

^{pr2}$

以更好的方式欣赏想法。在


Tags: 方法元素格式xmlmetadataesrimodtimemoddate
2条回答

两种更简单的方法,都有效,经过测试。在

首先:

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)

秒:

^{pr2}$

我更喜欢第一个,在我看来它更具可读性。在

我只会在循环结束后写入文件:

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)

我甚至会进一步简化这个循环:

^{pr2}$

相关问题 更多 >