如何在使用 lxml 生成 XML 的同时保持没有前缀的 xml 命名空间?
How to keep xml namespace without prefix, while generating XML using lxml?
我正在尝试创建简单的 SVG (XML) 文件,如下所示:
root = etree.Element('{http://www.w3.org/2000/svg}svg')
root.append(element) # element is a <path> element extracted from another SVG file
print(etree.tostring(root).decode())
但这给出了如下输出:
<ns0:svg xmlns:ns0="http://www.w3.org/2000/svg"><ns0:path ...></ns0:path></ns0:svg>
这个输出几乎是正确的,但是如何去掉它似乎随机添加的 ns0:
名称空间?预期输出为:
<svg xmlns="http://www.w3.org/2000/svg"><path ...></path></svg>
我试过使用 nsmap
如下,但这引发了 ValueError: Invalid namespace prefix ''
:
root = etree.Element('{http://www.w3.org/2000/svg}svg', nsmap={'': 'http://www.w3.org/2000/svg'})
# ...
This answer 接近,但它删除了名称空间前缀 和 名称空间,我真的不想要 - 我想删除名称空间 prefix,但保留命名空间(因为如果没有命名空间,它就不是有效的 SVG)。
你很接近。在 nsmap=
中,使用 None
:
而不是 ''
root = etree.Element('{http://www.w3.org/2000/svg}svg', nsmap={None: 'http://www.w3.org/2000/svg'})
root.append(element) # element is a <path> element extracted from another SVG file
print(etree.tostring(root).decode())
这将保留命名空间,但不会添加任何命名空间前缀(即 ns0
)。
我正在尝试创建简单的 SVG (XML) 文件,如下所示:
root = etree.Element('{http://www.w3.org/2000/svg}svg')
root.append(element) # element is a <path> element extracted from another SVG file
print(etree.tostring(root).decode())
但这给出了如下输出:
<ns0:svg xmlns:ns0="http://www.w3.org/2000/svg"><ns0:path ...></ns0:path></ns0:svg>
这个输出几乎是正确的,但是如何去掉它似乎随机添加的 ns0:
名称空间?预期输出为:
<svg xmlns="http://www.w3.org/2000/svg"><path ...></path></svg>
我试过使用 nsmap
如下,但这引发了 ValueError: Invalid namespace prefix ''
:
root = etree.Element('{http://www.w3.org/2000/svg}svg', nsmap={'': 'http://www.w3.org/2000/svg'})
# ...
This answer 接近,但它删除了名称空间前缀 和 名称空间,我真的不想要 - 我想删除名称空间 prefix,但保留命名空间(因为如果没有命名空间,它就不是有效的 SVG)。
你很接近。在 nsmap=
中,使用 None
:
''
root = etree.Element('{http://www.w3.org/2000/svg}svg', nsmap={None: 'http://www.w3.org/2000/svg'})
root.append(element) # element is a <path> element extracted from another SVG file
print(etree.tostring(root).decode())
这将保留命名空间,但不会添加任何命名空间前缀(即 ns0
)。