使用 ElementTree 从 XML 中删除整个标签

Remove whole tag from XML using ElementTree

我正在创建一个脚本来清理我需要加载的 XML 文件中的标签和属性。

结构示例:

<Cli TipCli="1" NmCli="client_name">
    <EndEtnCli EmaiCli="client_email"/>
</Cli>

如果属性 EmailCli 为空,我想删除整个标签 <EndEtnCli/>

我按照这里的一些教程进入了下面的代码,它没有显示任何错误,但它根本不起作用。

我错过了什么?

import xml.etree.ElementTree as ET
from datetime import date

tree = ET.parse('src/021/sample.xml')
root = tree.getroot()

for client in root:
  # sanitize email from client
  el = client.find('EndEtnCli')
  if el.attrib.get('EmaiCli') == '': client.remove(el)

currentDate = date.today().strftime('%Y%m%d')
tree.write(f'src/021/test_{ currentDate }', encoding="utf-8")

低于

import xml.etree.ElementTree as ET

xml = '''<r>
     <Cli TipCli="1" NmCli="client_name1">
       <EndEtnCli EmaiCli=""/>
     </Cli>  
     <Cli TipCli="2" NmCli="client_name2">
       <EndEtnCli/>
     </Cli>
     <Cli TipCli="3" NmCli="client_name3">
       <EndEtnCli EmaiCli="client_email"/>
     </Cli>
     </r>'''
root = ET.fromstring(xml)
cli_lst = root.findall('.//Cli')
for cli in cli_lst:
    child = cli.find('./EndEtnCli')
    email_cli = child.attrib.get('EmaiCli')
    if email_cli is None or len(email_cli) == 0:
        cli.remove(child)
ET.dump(root)

输出

<r>
     <Cli NmCli="client_name1" TipCli="1">
       </Cli>  
     <Cli NmCli="client_name2" TipCli="2">
       </Cli>
     <Cli NmCli="client_name3" TipCli="3">
       <EndEtnCli EmaiCli="client_email" />
     </Cli>
 </r>