【Python】如何对xml文件进行新增、修改和删除等操作_python docx xml 删除

SubElement_country2_rank.text = '68'
SubElement_country2_year = ET.SubElement(SubElement_country2,'year')
SubElement_country2_year.text = '2011'
SubElement_country2_gdppc = ET.SubElement(SubElement_country2,'gdppc')
SubElement_country2_gdppc.text = '13600'
SubElement_country2_neighbor0 = ET.SubElement(SubElement_country2,'neighbor',attrib={'name':'Costa Rica','direction':'W'})
SubElement_country2_neighbor1 = ET.SubElement(SubElement_country2,'neighbor',attrib={'name':'Colombia','direction':'E'})

#创建builders标签
SubElement_builders = ET.SubElement(root,'builders')
SubElement_builders_Shell = ET.SubElement(SubElement_builders,'hudson.tasks.Shell')
SubElement_builders_Shell_command = ET.SubElement(SubElement_builders_Shell,'command')
SubElement_builders_Shell_command.text = 'echo "Hello world!"'

#上面创建的内容都在一行上面显示,不利于我们的查看,对标签执行美化,标签前面添加是的的缩进
prettyXml(root, ' ', '\n')            #执行美化方法
ET.dump(root)                 #显示出美化后的XML内容

tree.write(xml_file)                   #将修改写入本地xml文件

def prettyXml(element, indent, newline, level = 0): # elemnt为传进来的Elment类,参数indent用于缩进,newline用于换行
if element: # 判断element是否有子元素
if element.text == None or element.text.isspace(): # 如果element的text没有内容
element.text = newline + indent * (level + 1)
else:
element.text = newline + indent * (level + 1) + element.text.strip() + newline + indent * (level + 1)
#else: # 此处两行如果把注释去掉,Element的text也会另起一行
#element.text = newline + indent * (level + 1) + element.text.strip() + newline + indent * level
temp = list(element) # 将elemnt转成list
for subelement in temp:
if temp.index(subelement) < (len(temp) - 1): # 如果不是list的最后一个元素,说明下一个行是同级别元素的起始,缩进应一致
subelement.tail = newline + indent * (level + 1)
else: # 如果是list的最后一个元素, 说明下一行是母元素的结束,缩进应该少一个
subelement.tail = newline + indent * level
prettyXml(subelement, indent, newline, level = level + 1) # 对子元素进行递归操作

xml_file = ‘/tmp/template.xml’
create_Xml(xml_file)


## 2 查看并修改xml文件内容


**查看所有的neighbor信息,并把attrib属性中’direction’为‘E’的修改为‘East’**



for neighbor in root.iter(‘neighbor’):
… if neighbor.attrib[‘direction’] == ‘E’:
… neighbor.attrib[‘direction’] = ‘East’
… print(neighbor.attrib)

{‘direction’: ‘East’, ‘name’: ‘Austria’}
{‘direction’: ‘W’, ‘name’: ‘Switzerland’}
{‘direction’: ‘N’, ‘name’: ‘Malaysia’}
{‘direction’: ‘W’, ‘name’: ‘Costa Rica’}
{‘direction’: ‘East’, ‘name’: ‘Colombia’}


**获取country name和rank属性**



for country in root.findall(‘country’):
… rank = country.find(‘rank’).text
… name = country.get(‘name’)
… print(name, rank)

Liechtenstein 1
Singapore 4
Panama 68


**在rank标签中新增attrib属性**



for rank in root.iter(‘rank’):
… new_rank = int(rank.text) + 1
… rank.text = str(new_rank)
… rank.set(‘updated’, ‘yes’)

tree.write(‘/tmp/output.xml’)


修改后的xml文件如下:



false 2 2008 141100 5 2011 59900 69 2011 13600

## 3 删除xml文件内容


**删除rank > 3的country,删除builders下的hudson.tasks.Shell标签,并配置text为deleted**



for country in root.findall(‘country’):
… rank = int(country.find(‘rank’).text)
… if rank > 3:
… root.remove(country)

for builders in root.findall(‘builders’):
… for shell in builders.findall(‘hudson.tasks.Shell’):
… builders.remove(shell)
… builders.text = ‘deleted’

tree.write(‘/tmp/output.xml’)


修改后的xml文件:



false 2 2008 141100 deleted

当一个页签下面有多个子标签时使用remove删除发现一次删不全  
 比如下面文件



<hudson.model.ListView>
test_all


compile
get_node_list
job_data
new_job
pipeline0
pipeline1
template
test_1
test_2
test_3


false
</hudson.model.ListView>

现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。

分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 22
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值