svgelements icon indicating copy to clipboard operation
svgelements copied to clipboard

Problematic `xmlns:ns0` with `write_xml`

Open alexreg opened this issue 1 year ago • 1 comments

Take an SVG like the following.

<svg xmlns:ns0="http://www.w3.org/1999/xlink" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events">
    ...
</svg>

If I then load and write this SVG back to a file, as follows.

svg = SVG.parse("input.svg")
svg.write_xml("output.svg")

Then I get something like this.

<svg xmlns:ns0="http://www.w3.org/1999/xlink" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events">
    ...
</svg>

This is invalid XML, since the same namespace is defined with two different names (ns0 and xlink), and causes problems with some other programs that read SVGs.

alexreg avatar Feb 16 '24 02:02 alexreg

Have a look at:

https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.register_namespace

which will register the namespace and quite possibly resolve your issue.

saardrimer avatar Aug 18 '24 14:08 saardrimer