2010-10-09 13 views
21

Ich baue ein SVG-Dokument mit ElementTree in Python 2.7. Hier ist der Code:Erstellen SVG/XML-Dokument ohne Ns0-Namespace mit Python ElementTree

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') 

Dies erzeugt die Ausgabe:

<?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> 

dies nicht als gültige SVG analysieren. Wie kann ich den Ns0-Namespace entfernen?

Antwort

45

Habe ich es einfach aus und ich so hier die Frage nicht löschen kann, ist es:

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

Ich denke, das funktioniert nur, wie von Python obwohl 2.7.

+13

Ihre eigene Frage zu beantworten ist viel besser, als es zu löschen. Wenn jemand diese Frage später hat, wird diese bereits beantwortet und indiziert! – codekaizen

+0

Wenn Sie Kompatibilität mit älteren Pythons benötigen (oder auch nicht), sollten Sie besser ['lxml.etree'] (http://codespeak.net/lxml/tutorial.html) verwenden: das ist mehr oder weniger eine Obermenge dessen, was von 'xml.etree' bereitgestellt wird. Hat jedoch einige externe Abhängigkeiten. – intuited

+0

lxml ist dafür bekannt, dass es nicht sofort mit OS X funktioniert. Sie bieten kein vorkompiliertes Ei für Intel Macs und der Versuch, es von Grund auf zu kompilieren, ist extrem schwierig. Der einzige Weg, um es schnell arbeiten zu lassen, ist, wenn Sie Macports verwenden, die ich nicht als eine akzeptable Abhängigkeit empfinde. – jfenwick

0

Hier ist, wie ich es mit lxml mache.

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

Gebrauchte Codebeispiel von hier: lxml-removing-xml-tags-when-parsing