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

问题描述 投票:0回答:1

我正在创建一个脚本来清理我需要加载的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")
python xml elementtree
1个回答
0
投票

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>
© www.soinside.com 2019 - 2024. All rights reserved.