svgelements
svgelements copied to clipboard
Problematic `xmlns:ns0` with `write_xml`
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.
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.