在 Python 中获取两个元素树对象之间的区别

Getting the difference between two element tree objects in Python

提问人:hfakoor222 提问时间:10/13/2023 最后编辑:hfakoor222 更新时间:10/23/2023 访问量:53

问:

我正在解析一些用于网络设备配置的 xml。我想找出某些标签子集的差异。

我的代码工作正常,但是我想将差异放在最终将写入日志的字典中。我已经使用 ElementTree 库遍历了标签,现在我必须从另一组文本中减去一组文本,或者找到一种方法来减去两个元素树对象。

代码如下:

def compare_object_groups(file1_root, file2_root):
    object_group_differences = {}
    elements1 = {entry.get("name"): entry for entry in file1_root.findall(".//address-group/entry")}
    elements2 = {entry.get("name"): entry for entry in file2_root.findall(".//address-group/entry")}
    for name, group1 in elements1.items():
        group2 = elements2.get(name)
        if group2:
            if ET.tostring(group1) != ET.tostring(group2):

我必须从 group1 中减去 group2 或减去字符串表示形式以带回不匹配的值。有没有办法返回两个元素树对象的差异?

我不在乎是否返回标签没有区别。

例如,我真的很想通过使用元素树对象而不是转换为字符串并按换行符拆分来返回差异

元素1 - 元素2

查找两个对象之间的差异似乎比字符串转换要干净得多

有没有一个内置的函数/库/方法可以为我实现这一点,或者有什么想法?

python-3.x 元素树

评论

0赞 hfakoor222 10/14/2023
嗯,有什么意见吗?

答:

0赞 hfakoor222 10/23/2023 #1

以防任何 1 还在想。

我只是将每个 xlm 文件中的 item.tag 放入一个单独的列表中,并比较了匹配标签的值。然后更新了有差异的字典。

for sub_elem1 in elem1:
        for tag in sub_elem1:
            elem1_attributes.append(tag)
    for sub_elem2 in elem2:
        for tag in sub_elem2:
            elem2_attributes.append(tag)
    for elem1 in elem1_attributes:
        for elem2 in elem2_attributes:
            if elem1.tag == elem2.tag:

       
                for member1 in elem1:
                    for member2 in elem2:
                        if member1.text != member2.text:
                            difference_attributes[file1_ip] = difference_attributes.get(file1_ip, []) + [member1.text]
                        if member2.text != member1.text:
                            difference_attributes[file2_ip] = difference_attributes.get(file2_ip, []) + [member2.text]