Seite 1 von 1
Python DOM SVG
Verfasst: Sonntag 26. Oktober 2014, 18:31
von Higarts
Hallo zusammen,
ich lerne Python erst seit Beginn dieses Semesters, bin also nicht wirklich fit.
Ich hänge gerade bei einer Aufgabe. Ich habe schon dazu gegoogelt finde aber keine Lösung bzw. sehe die Lösung vll nicht.
Jedenfalls soll ein Python Programm mit DOM erstellt werden, welches ein SVG Dokument (mit ein bisschen Text) als Datei einliest und die Inhalte der Textknoten abändert.
Ich finde allerdings nur Beispiele im Internet bzgl. XML-Dokumenten, die mit DOM dargestellt werden.
In meinem Skripte finde ich auch nur Beispiele mit XML-Dokumenten, wo dann mit der xml.dom.minidom-Bibliothek gearbeitet wird.
Gibt es auch eine svg.dom.minidom? Mir geht es jetzt primär um das einlesen, wie das hier funktioniert. Das mit dem Inhalt abändern will ich selber hinkriegen.
Habt ihr einen Tipp?
PS: Ich wusste jetzt nicht welches Unterforum ich nehmen soll. Danke im voraus fürs richtig einordnen!
Re: Python DOM SVG
Verfasst: Sonntag 26. Oktober 2014, 18:40
von cofi
Willkommen im Forum und zu Python!
SVG _ist_ ein XML Format, insofern brauchst du auf dieser Ebene[1] keine speziellen SVG Module. Benutze einfach XML Werkzeuge dafuer.
Wobei ich hier DOM meiden wuerde und `lxml` benutzen wuerde.
[1] Solange es um Textaenderungen und Aehnliches geht. Natuerlich macht es keinen Sinn so Bilder zu erzeugen.
Re: Python DOM SVG
Verfasst: Sonntag 26. Oktober 2014, 18:46
von Higarts
cofi hat geschrieben:Willkommen im Forum und zu Python!
SVG _ist_ ein XML Format, insofern brauchst du auf dieser Ebene[1] keine speziellen SVG Module. Benutze einfach XML Werkzeuge dafuer.
Wobei ich hier DOM meiden wuerde und `lxml` benutzen wuerde.
[1] Solange es um Textaenderungen und Aehnliches geht. Natuerlich macht es keinen Sinn so Bilder zu erzeugen.
DOM ist hier leider vorgeschrieben.
Die Textänderung ergibt sich daraus, dass das SVG ein Schema mit Kreisen und Pfeilen darstellt und in den Kreisen Text steht.
Re: Python DOM SVG
Verfasst: Sonntag 26. Oktober 2014, 19:24
von Sirius3
@Higarts: wieder mal ein typischer Fall von "Ich bearbeite schon seit 20 Jahren in Java XML-Dokumente mit DOM, also müssen meine Studenten auch in Python DOM benutzen". Die eindeutig überlegene API hat ElementTree bzw. lxml.
Re: Python DOM SVG
Verfasst: Sonntag 26. Oktober 2014, 19:25
von Higarts
Sirius3 hat geschrieben:@Higarts: wieder mal ein typischer Fall von "Ich bearbeite schon seit 20 Jahren in Java XML-Dokumente mit DOM, also müssen meine Studenten auch in Python DOM benutzen". Die eindeutig überlegene API hat ElementTree bzw. lxml.
Kann sein, der Dozent ist schon älter.
Aktueller Stand:
Code: Alles auswählen
schema=u"""<svg xmlns="http://www.w3.org/2000/svg" width="480" height="640" viewBox="0 0 480 640">
<defs>
<filter id="dropShadow" x="0" y="0" width="120%" height="120%">
<feGaussianBlur in= (...)
(...)
(...)
(...)
</g>
</g>
</svg>""".encode('UTF-8')
Soweit das SVG als String. Hatten wir mit dem XML-Dokument auch so gemacht.
Und dann minidom:
Code: Alles auswählen
#! /usr/bin/python
# -*- coding: utf-8 -*-
from xml.dom.minidom import parse, parseString
from xml.dom import DOMException
class XMLasDOM():
def __init__(self,xmldocument=None,filename=None):
if xmldocument:
self.document = parseString(xmldocument)
elif filename:
self.document = parse(filename)
else:
raise ValueError("kein Argument übergeben")
self.root = self.document.documentElement
schemaDokument = XMLasDOM(schema)
Soweit so gut, aber dann:
AttributeError: 'str' object has no attribute 'root'
Warum denn das? Bei der XML-Datei geht das ja auch?

Re: Python DOM SVG
Verfasst: Sonntag 26. Oktober 2014, 19:44
von Sirius3
@Higarts: Für Code gibt es hier im Forum die python-Tags. Damit werden auch Einrückungen korrekt dargestellt.
Was ist der Unterschied zwischen schema und schemaDokument?
Re: Python DOM SVG
Verfasst: Sonntag 26. Oktober 2014, 19:54
von Higarts
Sirius3 hat geschrieben:@Higarts: Für Code gibt es hier im Forum die python-Tags. Damit werden auch Einrückungen korrekt dargestellt.
Was ist der Unterschied zwischen schema und schemaDokument?
Habs abgeändert.
Da ist mir auch gleich der Fehler aufgefallen!
Es muss natürlich
heißen.
Ich arbeite dann mal weiter dran.

Re: Python DOM SVG
Verfasst: Montag 27. Oktober 2014, 20:34
von bwbg
Wofür ist eigentlich diese vollkommen unnütze Klasse gut? Alleine der Name deutet schon auf eine Funktion hin. Darüber hinaus nimmst Du in der __init__-Funktion eine Fallunterscheidung anhand der Parameter durch. Beim Aufruf musst Du Dir trotzdem Gedanken machen, welche Parameter Du mitgibst. Ergo: Wieder eine Fallunterscheidung.
Reduzierst Du das weiter, könntest du direkt die Funktionen parse und parseString verwenden.
Hier missbrauchst Du Klassen als Namensraum für eine Funktion; eigentlich zwei Funktionen in einer.
parse erwartet keinen Dateinamen sondern ein Datei-Objekt. Somit wäre die Signatur Deiner __init__-Funktion falsch.
Grüße ... bwbg