如何解决解析和修改多个XML文件
我正在尝试
- 从文件夹中读取多个XML文件
- 修改它们(删除两个标签的内容)
- 用新的替换旧的XML文件
这是我到目前为止得到的代码:
import xml.etree.ElementTree as ET
import glob
#parse xml files
filenames = glob.glob("[0-9][a-z](*).xml")
for filename in filenames:
with open(filename,'r',encoding="utf-8") as content:
tree = ET.parse(content)
lst_jugador = tree.findall('data/test')
for jugador in lst_jugador:
print (jugador.find('name').text,jugador.get("id"))
myroot = tree.getroot()
# remove tag content
for x in filenames:
myroot = tree.getroot()
for x in myroot[1][2]:
x.text = None
for x in myroot[1][17]:
x.text = None
filenames.write('data/new.xml')
我收到一个 NameError:名称'tree'未定义。
关于我在做什么错或如何以其他方式做到这一点的任何想法? 我能够使用单个xml文件来做到这一点,但我正努力读写多个xml文件。
这是读取和写入单个文件的代码(工作原理)的样子:
import xml.etree.ElementTree as ET
mytree = ET.parse('data/test.xml')
myroot = mytree.getroot()
for x in myroot[1][2]:
x.text = None
for x in myroot[1][17]:
x.text = None
mytree.write('data/new.xml')
这是我的xml文件的简化版本:
<xml_file>
<tag>
<tag_1>00000000</tag_1>
</tag>
<test>
<one>
<one_1>test</one_1>
<one_2>test</one_2>
<one_3>test</one_3>
<one_4>test</one_4>
<one_5>test</one_5>
<one_6>test</one_6>
<one_7>test</one_7>
<one_8>test</one_8>
<one_9>test</one_9>
<one_10>test</one_10>
<one_11>test</one_11>
<one_12>test</one_12>
</one>
<two>
<two_1>test</two_1>
<two_2>test</two_2>
<two_3>test</two_3>
<two_4>test</two_4>
<two_5>test</two_5>
<two_6>test</two_6>
<two_7>test</two_7>
<two_8>test</two_8>
</two>
</test>
</xml_file>
解决方法
使用定义的方法简单地概括您的工作过程,然后使用docs将文件迭代地传递给函数。
import xml.etree.ElementTree as ET
import glob
# DEFINED METHOD RECEIVING FILE AS PARAMETER
def update_xml(xml_file)
mytree = ET.parse(xml_file)
myroot = mytree.getroot()
for x in myroot[1][2]:
x.text = None
for x in myroot[1][17]:
x.text = None
mytree.write(xml_file) # WRITE NEW TREE TO DISK
return mytree # RETURN NEW TREE IN FUNCTION
# ITERATIVELY UPDATE XML WITH map()
filenames = glob.glob("[0-9][a-z](*).xml")
new_trees = list(map(update_xml,filenames))
,
这是一个格式问题,您需要将“ tree = ET.parse(content)”与“ myroot = tree.getroot()”相同级别
尝试
import xml.etree.ElementTree as ET
import glob
#parse xml files
filenames = glob.glob("[0-9][a-z](*).xml")
for filename in filenames:
with open(filename,'r',encoding="utf-8") as content:
tree = ET.parse(content)
lst_jugador = tree.findall('data/test')
for jugador in lst_jugador:
print (jugador.find('name').text,jugador.get("id"))
tree = ET.parse(content)
myroot = tree.getroot()
# remove tag content
for x in filenames:
myroot = tree.getroot()
for x in myroot[1][2]:
x.text = None
for x in myroot[1][17]:
x.text = None
filenames.write('data/new.xml')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。