相关文章推荐
瘦瘦的风衣  ·  clang /usr/bin/ld ...·  1 年前    · 
面冷心慈的松球  ·  Linker Tools Warning ...·  1 年前    · 
乐观的长颈鹿  ·  [python爬虫] ...·  1 年前    · 
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

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?

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.

Answering your own question is much better than deleting it. If someone later has this question, it will already be answered and indexed! – codekaizen Oct 9, 2010 at 6:47 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. – intuited Oct 9, 2010 at 6:51 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 Oct 9, 2010 at 17:13 As someone who googled python xml ns0 and got your answer, I'm pretty grateful this wasn't deleted ;) – Conrad.Dean Oct 30, 2012 at 16:59 @jfenwick, where in your code (after which line) do you put the register-namespace method? – sbru Sep 19, 2014 at 22:52
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