问题介绍:
实现读取两个xml文件,将其中一个文件中的xml项目对应的值,填写在另外一个xml中,实现xml的部分值的拷贝的效果。
待解析的xml:
<?xml version="1.0" ?>
<config>
<UserName>guest</UserName>
<Password>root</Password>
<DatabaseName>database</DatabaseName>
<Port>114</Port>
</config>
code:
#! encoding = utf-8
import xml.etree.ElementTree as ET
from xml.dom.minidom import *
class ParseXml:
# 解析xml, 传入xml文件路径, 和配置的名字;传出字典:(配置项:values)
@classmethod
def get_config(cls, config_file, name_list):
dict_results = dict()
tree = ET.parse(config_file)
for name in name_list:
mask = tree.find(name)
if mask.text is None:
pass
else:
dict_results[name] = mask.text
return dict_results
# 修改一个xml的值,传入待修改的xml,与待修改的列表
@classmethod
def modify_xml(cls, xml_name, dict_old):
dom = xml.dom.minidom.parse(xml_name)
for key in dict_old.keys():
cc = dom.getElementsByTagName(key)
cc[0].firstChild.data = dict_old[key]
with open(xml_name, 'w') as tf:
dom.writexml(tf)
# 进行修改, 传入参数为新的和旧的xml, 以及需要还原的项目列表
@classmethod
def modify_one_xml(cls, old_xml, new_xml, back_list):
dict_old = cls.get_config(old_xml, back_list)
cls.modify_xml(new_xml, dict_old)
if __name__ == '__main__':
app_data = ['UserName', 'Password', 'DatabaseName', 'Port']
ParseXml.modify_one_xml(r'demo.xml', r'demo2.xml', app_data)