Brauche kleine aber feine Lösung ;)

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Edit: OK, das wusstest du schon.
Bin ja nicht von vorgesern :)


Ich habe mir gerade noch ein paar Tutorials zu Python und XML angeschaut... SAX -- zu groß... DOM --- zu groß... ElementTree :) PASSEND! :) :)


btw. du hast öfters XMLRPC erwähnt, als eine Möglichkeit Daten auszutauschen zwischen Client und Server. Was steckt dahinter? -- Was genau ist so ein XML-RPC Server? -- Wie werden dort die Daten übertragen?


MfG EnTeQuAk
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

EnTeQuAk hat geschrieben:btw. du hast öfters XMLRPC erwähnt, als eine Möglichkeit Daten auszutauschen zwischen Client und Server. Was steckt dahinter? -- Was genau ist so ein XML-RPC Server? -- Wie werden dort die Daten übertragen?
Hi EnTeQuAk!

Das ist in Python so ziemlich die einfachste Möglichkeit, Daten zwischen einem Serverprogramm und einem Clientprogramm auszutauschen. Der Datenaustausch läuft über das zustandslose HTTP-Protokoll. Das heißt, dass du vom Client aus Funktionen auf dem Server aufrufen kannst. Dann bekommst du vom Server irgendwelche Daten zurück. Du kannst aber nicht vom Server aus eine Funktion auf dem Client ausführen. Dafür bräuchtest du zusächlich eine Verbindung in die entgegengesetzte Richtung. Da das aber fast nie gebraucht wird, ist XMLRPC so ziemlich das einfachste was es unter Python gibt.

http://www.python-forum.de/topic-5478.html

Wenn du z.B. Text vom Client zum Server übertragen möchtest, dann schreibst du auf dem Server eine Funktion, die einen Text als Argument entgegen nehmen kann. Vom Client aus rufst du diese Funktion mit dem entsprechenden Argument auf.

Da das Protokoll sehr einfach ist, bist du auf die einfachen Datentypen (str, int, float, tupple, list, dictionary) eingeschränkt. Du kannst aber auch Binärdaten übertragen lassen.
Diese Binärdaten kannst du z.B. so ``xmlrpclib.Binary("ich bin binaer")`` in einen übertragbaren String umwandeln und als Argument übergeben. Der Empfänger bekommt die Binärdaten über das Attribut ``data`` wieder aus dem Container raus.

- http://docs.python.org/lib/module-xmlrpclib.html
- http://docs.python.org/lib/module-Simpl ... erver.html

Man muss nicht einmal den XMLRPC-Server laufen lassen. Man kann einen XMLRPC-Handler auch von einem CGI-Programm aus aufrufen. So lässt sich XMLRPC auch dann verwenden, wenn nur Port 80 zur Verfügung steht. Man lässt den Apachen "servieren" und ein CGI-Skript beantwortet die GET- oder POST-Anfrage mit gültigem XMLRPC. Der Apache gibt das Ganze dann per HTTP wieder zurück. Die Daten sind in eine XML-Struktur eingepackt.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

DAS werde ich auch mal ausprobieren ;) vllt. ist das im Enddefekt einfacher, als das ganze via FTP zu übertragen. Mal schauen :D :D

Herzlichen Dank nochmal an dich Gerold, der du mir wiedermal eine neue Welt gezeigt hast :)

Und an alle andere, die hier mitgemacht haben :D
tomate
User
Beiträge: 48
Registriert: Sonntag 5. August 2007, 12:07

Moin!
Ich kriege folgende Fehlermeldungen beim Einlesen der XML-Datei:

etree = parse(file)
File "E:\Programme\Python25\Lib\xml\etree\ElementTree.py", line 862, in parse
tree.parse(source, parser)
File "E:\Programme\Python25\Lib\xml\etree\ElementTree.py", line 579, in parse
source = open(source, "rb")
IOError: [Errno 2] No such file or directory: '<?xml version="1.0" ?>\n<events>\n <event>\n <datetime>\n 01.01.2001 12:00:01\n </datetime>\n <priority>\n

...
Als XML-Datei habe ich folgendes Beispielvon Y0Gi genommen:
<?xml version="1.0" ?>
<events>
<event>
<datetime>
01.01.2001 12:00:01
</datetime>
<priority>
1
</priority>
<message>
Event #1 has occured.
</message>
</event>
...
Der Code sieht wie folgt aus:

Code: Alles auswählen

        #Einlesen
        dlg = wx.FileDialog(self, "Datei öffnen", self.dirname, "", "*.*", wx.OPEN)
        if dlg.ShowModal() == wx.ID_OK:
            self.filename=dlg.GetFilename()
            self.dirname=dlg.GetDirectory()
            f=open(os.path.join(self.dirname, self.filename),'r')
            self.data = f.read()
            f.close()
        dlg.Destroy()
       
        self.readXmlFile(self.data)
und

Code: Alles auswählen

from xml.etree.ElementTree import Element, SubElement, tostring, parse

def readXmlFile(file):
    etree = parse(file)
    root_tag = etree.getroot()
Was mache ich falsch?
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Einiges! Du übergibst nämlich den Inhalt der XML-Datei als Dateinamen an ``ElementTree.parse()`` :)
Antworten