首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在使用lxml生成xml时保持不带前缀的XML命名空间?

如何在使用lxml生成xml时保持不带前缀的XML命名空间?
EN

Stack Overflow用户
提问于 2021-05-16 09:26:52
回答 1查看 366关注 0票数 0

我试图创建简单的SVG (XML)文件,如下所示:

代码语言:javascript
运行
复制
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())

但这给出了如下的输出:

代码语言:javascript
运行
复制
<ns0:svg xmlns:ns0="http://www.w3.org/2000/svg"><ns0:path ...></ns0:path></ns0:svg>

这个输出几乎是正确的,但是如何摆脱它似乎是随机添加的ns0:命名空间呢?预期产出如下:

代码语言:javascript
运行
复制
<svg xmlns="http://www.w3.org/2000/svg"><path ...></path></svg>

我试过使用nsmap,如下所示,但这会引发ValueError: Invalid namespace prefix ''

代码语言:javascript
运行
复制
root = etree.Element('{http://www.w3.org/2000/svg}svg', nsmap={'': 'http://www.w3.org/2000/svg'})
# ...

This answer非常接近,但它删除了名称空间前缀,并将名称空间作为名称空间(我并不真正想要的名称空间)--我希望删除名称空间前缀,但保留名称空间(因为它不会是一个没有名称空间的有效SVG )。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-16 09:26:52

你离我很近。在nsmap=中,而不是''中,使用None

代码语言:javascript
运行
复制
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)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67554980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档