使用 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}']")
当我在 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}']")