使用 Python f-string 和 Xpath 修改带有命名空间的 XML 数据

Modification of XML data with namespaces using Python f-string and Xpath

当我在 XML 文件

中使用名称空间和带有 f 字符串的 XPATH 进行修改时,我的程序出现错误

这很好用,它显示了 XML 文件的所有属性

for x in root.findall(".//{http://www.github/cliffe/SecGen/scenario}vulnerability"):
    print(x.tag,"--->",x.attrib) 
        

但是在这段代码中,由于 f-string

,当我从用户那里获取输入数据时,它给出了一个错误 NameError: name 'http' is not defined
ch = input('\nEnter Tag you want to change : ')
for x in root.findall(f".//{http://www.github/cliffe/SecGen/scenario}vulnerability[@module_path={ch}]"): #ERROR
    print("Tag you want to change ",x.tag,"--->",x.attrib) 
    changes = str(input('\nEnter Your changed tag : '))
    x.attrib['module_path'] = f'{changes}'

由于命名空间 URI 是 delimited by curly braces,您需要对 f-string 的那部分使用双花括号。您还需要将谓词中的属性值括起来。

root.findall(f".//{{http://www.github/cliffe/SecGen/scenario}}vulnerability[@module_path='{ch}']")