【发布时间】:2022-01-24 14:53:44
【问题描述】:
我现在有一个问题让我有点生气,因为它真的不应该是一个问题,但我们开始吧:
我想在 python 中使用 xml.etree-library 修改一些 svg 图像,以便之后在 webapp 中显示它们。但是,当尝试仅解析图像然后使用 ElementTree.tostring 再次将它们作为字符串输出时,我注意到默认 ns0 命名空间被放在图像中的每个 xml-tag 前面,这导致我的浏览器无法当我将整个内容放入 html-doc 时解析 svg。
这是我的输入 svg 的示例:
<?xml version="1.0" standalone="yes"?>
<svg viewbox="0 0 400.0 400.0" xmlns="http://www.w3.org/2000/svg">
<g>
<ellipse cx="200.0" cy="200.0" rx="22.5" ry="15.0" fill="yellow" stroke="black" stroke-width="1"/>
<text x="200.0" y="205.0" text-anchor="middle" font-size="12">aBool</text>
</g>
</svg>
当现在做类似的事情时
svg = ElementTree.parse(<file>)
ElementTree.tostring(svg.getroot(), "unicode")
它吐出以下内容:
<ns0:svg xmlns:ns0="http://www.w3.org/2000/svg" viewbox="0 0 400.0 400.0">
<ns0:g>
<ns0:ellipse cx="200.0" cy="200.0" rx="22.5" ry="15.0" fill="yellow" stroke="black" stroke-width="1" />
<ns0:text x="200.0" y="205.0" text-anchor="middle" font-size="12">aBool</ns0:text>
</ns0:g>
</ns0:svg>
我唯一想要的是 ElementTree.tostring 函数不要将任何命名空间放入我的标签中。虽然我发现了很多关于如何在 xml.etree 中使用命名空间做一些更复杂的事情的信息,但似乎没有关于如何不使用它们的信息。这个图书馆不可能吗?如果是这样,我可以改用什么库?
【问题讨论】:
-
看起来不错,似乎可以正常工作,非常感谢!
标签: python xml svg elementtree xml-namespaces