27

I'm building an SVG document with ElementTree in Python 2.7. Here is the code:

from xml.etree import ElementTree as etree

root = etree.XML('<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg"></svg>')
root.append(etree.Element("path"))
root[0].set("d", "M1 1 L2 2 Z")
print etree.tostring(root, encoding='iso-8859-1')

This generates the output:

<?xml version='1.0' encoding='iso-8859-1'?>
<ns0:svg xmlns:ns0="http://www.w3.org/2000/svg" height="100%" version="1.1" width="100%"><path d="M1 1 L2 2 Z" /></ns0:svg>

This does not parse as valid SVG. How can I remove the ns0 namespace?

0

2 Answers 2

57

I just figured it out and I can't delete the question so here it is:

etree.register_namespace("","http://www.w3.org/2000/svg")

I think this only works as of Python 2.7 though.

Sign up to request clarification or add additional context in comments.

7 Comments

Answering your own question is much better than deleting it. If someone later has this question, it will already be answered and indexed!
If you need compatibility with older Pythons (or even if you don't), you might be better off using lxml.etree: this is more or less a superset of what's provided by xml.etree. Has some external dependencies, though.
lxml is notorious for not working on OS X out of the box. They don't provide a precompiled egg for Intel macs and trying to compile it from scratch is extremely hard. The only way to get it working quickly is if you're using macports, which I don't feel is an acceptable dependency.
As someone who googled python xml ns0 and got your answer, I'm pretty grateful this wasn't deleted ;)
@jfenwick, where in your code (after which line) do you put the register-namespace method?
|
0

Here's how I do it with lxml.

from lxml import etree
svg_tree = etree.fromstring(svg_str, parser=etree.XMLParser())
etree.tostring(svg_tree)

Used sample code from here: lxml-removing-xml-tags-when-parsing

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.