2010-10-09 20 views
21

Estoy creando un documento SVG con ElementTree en Python 2.7. Aquí está el código:Crear documento SVG/XML sin espacio de nombres ns0 usando 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') 

Esto genera la salida:

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

Esto no analiza SVG como válido. ¿Cómo puedo eliminar el espacio de nombres ns0?

Respuesta

45

yo sólo pensé que fuera y no puedo borrar la pregunta así que aquí está:

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

creo que esto sólo funciona a partir de Python 2.7 embargo.

+13

responder a su propia pregunta es mucho mejor que eliminarlo. Si alguien más tiene esta pregunta, ¡ya será respondida e indexada! – codekaizen

+0

Si necesita compatibilidad con Pythons anteriores (o incluso si no lo hace), es mejor que use ['lxml.etree'] (http://codespeak.net/lxml/tutorial.html): esto es más o menos un superconjunto de lo que proporciona 'xml.etree'. Tiene algunas dependencias externas, sin embargo. – intuited

+0

lxml es conocido por no funcionar en OS X de fábrica. No proporcionan un huevo precompilado para las Macs de Intel e intentar compilarlo desde cero es extremadamente difícil. La única forma de hacerlo funcionar rápidamente es si está utilizando macports, lo cual no creo que sea una dependencia aceptable. – jfenwick

0

Así es como lo hago con lxml.

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

código de ejemplo usados ​​de aquí: lxml-removing-xml-tags-when-parsing

Cuestiones relacionadas