python使用elementTree拼接xml(主从健康检查结果合并)

本文介绍了一种使用Python的xml.etree.ElementTree模块来解析和合并两个XML文件的方法。通过读取本地和从机的检查结果文件,将从机的检查结果合并到本地结果中,同时保持原有的接口文件形式不变。文章详细展示了如何遍历XML节点,获取并修改文本内容,最后将合并后的结果写入新的XML文件。

nhc.xml

支持主机显示从机检查结果,且不改变现有接口文件形式
现有结果用*分隔列,用:分隔列名和检测结果
在检测结果里增加从机结果,用/分隔

<?xml version="1.0"?>
<checkList type="omc">
    <systemVersion name="systemVersion">Check Result:Pass*Version:11*PatchLevel:3*GDBVersion:7.5</systemVersion>
    <mysqlStatus name="mysqlCheck">Check Result:Pass</mysqlStatus>
</checkList>
# coding = utf-8
import xml.etree.ElementTree as ElementTree

local_result_file = './local/nhc.xml'
slave_result_file = './slave/nhc.xml'
local_tree = ElementTree.ElementTree(file=local_result_file)
slave_tree = ElementTree.ElementTree(file=slave_result_file)
local_root = local_tree.getroot()
slave_root = slave_tree.getroot()

# 打印root的标签
# 打印结果
# checkList
print(local_root.tag)

# 打印root的属性
# 打印结果
# {'type': 'omc'}
print(local_root.attrib)

# 打印child的属性
# 打印结果
# systemVersion {'name': 'systemVersion'} Check Result:Pass*Version:11*PatchLevel:3*GDBVersion:7.5
# mysqlStatus {'name': 'mysqlCheck'} Check Result:Pass
for child in local_root:
    print(child.tag, child.attrib, child.text)
print('===========================')


def merge_result(local_str='', slave_str=''):
    local_value_list = local_str.split('*')
    slave_value_list = slave_str.split('*')
    if 'Result:Pass' in local_value_list[0]:
        if 'Result:Pass' not in slave_value_list[0]:
            local_value_list[0] = slave_value_list[0]
    merge_str = local_value_list[0]
    print(merge_str)
    for i in range(1, len(local_value_list)):
        merge_str += '*'
        merge_str += local_value_list[i]
        merge_str += '/'
        merge_str += slave_value_list[i].split(':')[1]
    return merge_str


# 合并各检查结果,使用/分割
for child in local_root:
    node = slave_tree.find(child.tag)
    local_result = child.text
    slave_result = node.text
    child.text = merge_result(local_result, slave_result)

local_tree.write('./nhcNew.xml')

合并后的nhcNew.xml

<checkList type="omc">
    <systemVersion name="systemVersion">Check Result:Pass*Version:11/11*PatchLevel:3/3*GDBVersion:7.5/7.5</systemVersion>
    <mysqlStatus name="mysqlCheck">Check Result:Pass</mysqlStatus>
</checkList>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值