2017-01-28 3 views
0

Wie kann ich SVG-Dateien bereinigen, indem unsichtbare Objekte oder Ebenen mit einem Python-Skript entfernt werden. Solche Elemente setzen zumindest eine der folgenden Arten haben:Wie entfernt man unsichtbare Elemente in SVG-Dateien mit Python?

display: none 
opacity: 0 
visibility: hidden 

Ich erwäge eine RegexMuster zu verwenden, aber die Komplexität von XML gegeben, Regex ist in der Regel hier abgeraten.

Wäre es eine Option, lxml zu verwenden? Ich kann einige HTML-Änderungen machen, aber ich bin nicht sicher über SVG und wie man die geänderten Daten in der Datei richtig speichert.

+0

haben Sie 'lxml' versucht? und was hast du bekommen? Zeigen Sie Ihre Code und FULL-Fehlermeldung. – furas

+0

Ich habe lxml nicht getestet, weil ich nicht genug darüber weiß. Ich weiß nicht einmal, ob das mit SVG möglich ist. –

Antwort

0

es getan:

from lxml import etree 
doc = etree.parse('/test.svg') 
for action, el in etree.iterwalk(doc): 
    if el.attrib.get('display', None) == 'none' or el.attrib.get('visibility', None) == 'hidden' or el.attrib.get('opacity', None) == '0': 
     el.clear() 
with open('/test_out.svg', 'w') as f: 
    f.write(u'<?xml version="1.0" encoding="UTF-8"?>\n'+etree.tostring(doc, pretty_print=True)) 

Ich hoffe, dass alle Fälle fangen.

+1

lxml kann direkt in xml_declation schreiben, keine String-Konzentration nötig: 'f.write (etree.tostring (doc, xml_declaration = True, encoding =" utf-8 ")' –

+0

Danke, vielleicht hast du eine Idee zu dem neuen Problem kam mit diesem Snippet: http://stackoverflow.com/questions/41920272/strip-out-all-namespace-declarations-tags-and-attributes-from-svg-file-with-pyt –

Verwandte Themen