tags:

views:

48

answers:

1

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"&gt;&lt;/svg&gt;')
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?

+2  A: 

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.

jfenwick
Answering your own question is much better than deleting it. If someone later has this question, it will already be answered and indexed!
codekaizen
If you need compatibility with older Pythons (or even if you don't), you might be better off using [`lxml.etree`](http://codespeak.net/lxml/tutorial.html): this is more or less a superset of what's provided by `xml.etree`. Has some external dependencies, though.
intuited
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.
jfenwick