比较两个xml文件是否相同简单完整版

本文提供了一种简单完整的方法来比较两个XML文件的相同性,通过递归实现深入对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

话不多说直接上代码

from xml.etree import ElementTree as ET

#新文件路径与旧文件路径
NewFilePath = "D:\parseXml\\trans.xml"#新文件路径
OldFilePath = "D:\parsexml1\\trans.xml"#旧文件路径

# xml文件中的标签列表
tags =[]
attr = []

# 调用递归函数生成需要的xml标签与属性值
def root(childs):
    for child in childs:
        if (child.getchildren() is None):
            break
        else:
            attr.append(child.attrib)
            tags.append(child.tag)
            root(child)

#调用递归函数获取新文件的属性值列表
def newattrList(NewRoot):
    root(NewRoot)
    newattr=attr.copy()
    attr.clear()
    return newattr

#调用递归函数获取旧文件的属性值列表
def oldattrList(OldRoot):
    root(OldRoot)
    oldattr=attr.copy()
    return oldattr

#比对两个xml文件内容(属性值是否相同),标签数量是否相同(多少)
def compareToxml(NewFilePath,OldFilePath):

    tag ={ 1 : "新的标签数量多" , 2 : "新的标签数量少", 3 : "属性值相同" , 4 : "属性值不相同" }
    # 直接解析xml文件
    NewTree = ET.parse(NewFilePath)
    Oldtree = ET.parse(OldFilePath)

    # 获取xml文件的根节点
    NewRoot =  NewTree.getroot()
    OldRoot = Oldtree.getroot()

    #调用递归函数生成旧(原)文件需要的xml标签与标签个数
    oldattr =oldattrList(OldRoot)
    oldtags = tags.__len__()
    oldattr.insert(0,OldRoot.attrib)
    attr.clear()

    # 调用递归函数生成新(新生成的测试)文件需要的xml标签与标签个数
    newattr = newattrList(NewRoot)
    newtags = tags.__len__()-oldtags
    newattr.insert(0,NewRoot.attrib)

    #返回标签数量多少
    if (oldtags < newtags):
         # 返回值为新的数量多
        return tag.get(1)
    elif (oldtags > newtags):
        # 返回值为新的数量少
        return tag.get(2)

    #返回属性值是否相同
    if(oldattr == newattr):
        return tag.get(3)
    return tag.get(4)

if __name__ == "__main__":
    print(compareToxml(NewFilePath,OldFilePath))


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值