我现在有一个问题让我有点抓狂,因为它真的不应该是一个问题,但我们开始了:
我想使用python中的xml.etree-library修改一些svg图像,以便稍后在网络应用程序中显示它们。但是,当我试图解析图像,然后再次使用ElementTree.tostring将它们作为字符串输出时,我注意到图像中的每个xml标记前面都放了一个默认的ns0命名空间,这导致当我将整个内容放入html文档时,我的浏览器无法解析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中发现了很多关于如何使用名称空间做一些更复杂的事情的信息,但似乎没有关于如何不使用它们的信息。这是不是不可能用这个libraray?如果是,我可以使用哪个库?
正如mzjn所指出的,stackoverflow.com/a/68470618/407651为我的问题提供了一个答案,它似乎正在发挥作用。