2010-10-09 11 views
21

Buduję dokument SVG z ElementTree w Pythonie 2.7. Oto kod:Utwórz dokument SVG/XML bez przestrzeni nazw ns0 przy użyciu 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') 

To generuje dane wyjściowe:

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

nie analizować jako ważny SVG. Jak mogę usunąć przestrzeń nazw ns0?

Odpowiedz

45

Właśnie zorientowaliśmy się i nie mogę usunąć pytanie, więc tutaj jest:

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

myślę, że to działa tylko jako Pythona 2.7 chociaż.

+13

Odpowiadając na swoje pytanie jest o wiele lepsza niż usuwanie go. Jeśli ktoś później to pytanie, to będzie już odebrane i zindeksowane! – codekaizen

+0

Jeśli potrzebujesz kompatybilności ze starszymi Pythonami (lub nawet, jeśli nie), możesz lepiej skorzystać z ['lxml.etree'] (http://codespeak.net/lxml/tutorial.html): to jest coś więcej lub mniej nadzbiór tego, co dostarcza 'xml.etree'. Ma jednak pewne zewnętrzne zależności. – intuited

+0

lxml jest znany z tego, że nie działa na OS X po wyjęciu z pudełka. Nie zapewniają one prekompilowanego jajka dla komputerów Mac z procesorem Intel, a próba skompilowania go od początku jest niezwykle trudna. Jedynym sposobem na szybkie uruchomienie go jest użycie Macportów, co nie jest akceptowalną zależnością. – jfenwick

0

Oto, jak to zrobić z lxml.

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

Używane przykładowy kod tutaj: lxml-removing-xml-tags-when-parsing

Powiązane problemy