XML 属性值无法匹配我的另一个字典的键,所以我无法替换属性值

XML attrib values cannot match my another dict's keys so i cannot replace attrib value

我有这个 xml 文件

<?xml version='1.0' encoding='utf-8'?>
<Applications>
    <AVBApplication name="AVB_1">
        <Mode>A</Mode>
        <AVBClass>CLASS_A</AVBClass>
        <PayloadSize>11</PayloadSize>
        <NoOfFrames>3</NoOfFrames>
        <Source name="ES407" />
        <Destinations>
            <Dest name="ES403" />
            <Dest name="ES416" />
            <Dest name="ES410" />
        </Destinations>
    </AVBApplication>
...

我要改变

<Source name="ES407" />

标签的属性值。我有一个这样的字典(merged_nodes_list)

{'B000': 'B0', 'B100': 'B1', 'B101': 'B2', 'B102': 'B3', 'B103': 'B4', 'B104': 'B5', 'B200': 'B6', 'B201': 'B7', 'B202': 'B8', 'B203': 'B9', 'B204': 'B10', 'B205': 'B11', 'B206': 'B12', 'B207': 'B13', 'B208': 'B14', 'B209': 'B15', 'B300': 'B16', 'B301': 'B17', 'B302': 'B18', 'B303': 'B19', 'B304': 'B20', 'B305': 'B21', 'B306': 'B22', 'B307': 'B23', 'B308': 'B24', 'B309': 'B25', 'B310': 'B26', 'B311': 'B27', 'B312': 'B28', 'B313': 'B29', 'B314': 'B30', 'B315': 'B31', 'B316': 'B32', 'B317': 'B33', 'B318': 'B34', 'B319': 'B35', 'ES400': 'ES36', 'ES401': 'ES37', 'ES402': 'ES38', 'ES403': 'ES39', 'ES404': 'ES40', 'ES405': 'ES41', 'ES406': 'ES42', 'ES407': 'ES43', 'ES408': 'ES44', 'ES409': 'ES45', 'ES410': 'ES46', 'ES411': 'ES47', 'ES412': 'ES48', 'ES413': 'ES49', 'ES414': 'ES50', 'ES415': 'ES51', 'ES416': 'ES52', 'ES417': 'ES53', 'ES418': 'ES54', 'ES419': 'ES55'}

如你所见,我想抓取“ES407”,搜索我的字典('ES407':'ES43' 在这种情况下)并替换为“ES43”。期望的输出应该是

<Source name="ES43" />
for i in root.findall(".//AVBApplication/Source"):
    for x, y in merged_nodes_list.items():
        if i.attrib.values() == x:
            print(y)

在该代码中,if 语句不起作用。我试过调试 debug picture.如我所见

name={str}'ES407'
x={str}'ES407'

看起来是一样的,但显然不是。我错过了什么?

i.attrib 是一个字典,它不会等于 merged_nodes_list.

中的键

您应该遍历它的属性,替换字典中的值。

for i in root.findall(".//AVBApplication/Source"):
    for attr, value in i.attrib.items():
        if value in merged_nodes_list:
            i.attrib[attr] = merged_nodes_list[value]