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]
我有这个 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]