Editando svg con python.

Para que no me olvide que es fácil y no tengo que usar BeautifulSoup. Según este artículo haciendo un par de cositas debería funcionar pero en mi caso el svg resultante de hacer renderContents() o str() tenía un par de errores.

Así que a usar etree, no es tan complicado. En esta pregunta de StackOverflow explican bastante bien cómo trabajarlo.


from lxml import etree

nsmap = {
'sodipodi': 'http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd',
'cc': 'http://web.resource.org/cc/',
'svg': 'http://www.w3.org/2000/svg',
'dc': 'http://purl.org/dc/elements/1.1/',
'xlink': 'http://www.w3.org/1999/xlink',
'rdf': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
'inkscape': 'http://www.inkscape.org/namespaces/inkscape'
}

template='calendario_2010.svg'
f = open(template)
data = f.read()
f.close()
tree = etree.XML(data)

#xpath devuelve una lista.
tnombre = tree.xpath('//svg:text[@id="txt_nom"]/svg:tspan',namespaces=nsmap)[0]
tnombre.text = 'nombre_alumno'

#cajas de texto hijas de un grupo "tlunes"
lunes = tree.xpath('//svg:g[@id="tlunes"]/svg:text/svg:tspan', namespaces=nsmap)

#hacer algo...
for hora in lunes:
hora.text = 'saraza'

#guardar...
f = open('salida.svg','w')
f.write(etree.tostring(tree))
f.close()

o algo asi… viendo la doc de lxml hay un montón de cosas mal usadas.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.