Python-Datenstruktur in XML darstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Da ich auch gerade versuche mein kleines Programm auf xml umzubauen, wollte ich mal fragen wie man ein Dictionary in xml speichert. Mein erster Ansatz war wie folgt:

xml-Datei:

Code: Alles auswählen

<?xml version="1.0" ?>
<gruppe bezeichnung="Einstellungen1" server="feld-server" client="feld-bertlap">
    <eintrag bezeichnung="Eigene Dateien">{'Benutzer':['markus', 'maria', 'bernard', 'kaiserbert'],
                'Frage':[' von /home/', '/eigenedateien/'],
                'Exclude':['--exclude', '__thereIsNothingToExcludeInThisSourceButINeedAnEmptyExclude__'], 
                'Client':['/home/', '/eigenedateien/'], 
                'Server':['@'+SERVER+':/home/', '/eigenedateien/']}
    </eintrag>
    <eintrag bezeichnung="Mozilla Firefox">
        ...
    </eintrag>
</gruppe>
Ist mein Ansatz funktionstüchtig? bevor ich weitere Tage an Arbeit investiere. :mrgreen: Weiterhin was macht er mit der Variablen SERVER, wenn ich dieses Dictionary in python in eine Variable speichere?

Ich wollte einen kurzen knappen lesabaren Code erzeugen ohne viele Schleifen. Mit den xml-Operationen wird mir das alles zu unübersichtlich.

Grüße Markus
Zuletzt geändert von Anonymous am Dienstag 3. Mai 2011, 16:58, insgesamt 1-mal geändert.
Grund: Thema abgetrennt.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Da die Schnittmenge zwischen deiner und der ursprünglichen Frage im Prinzip vollkommen leer ist, solltest du vielleicht doch besser einen eigenen Thread starten.

Sebastian
Das Leben ist wie ein Tennisball.
BlackJack

@feldmaus: Du vermischst da XML und Python-Quelltext. Das geht so nicht, beziehungsweise führt zu nichts Gutem.

Vielleicht solltest Du eher auf JSON umsteigen, da ist das serialisieren und das parsen zwischen JSON und Python-Dictionaries/Listen/Zeichenketten/… einfacher als bei XML.

Mit der Server-Variablen musst Du Dir allerdings selbst etwas ausdenken. In XML könnte man die vielleicht als Entity-Referenz definieren, aber das wäre eher ungewöhnlich.
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Das dachte ich mir schon. Mist. Mein fertiges Programm wollte ich auch als Referenz für Bewerbungen nutzen. Und XML wird halt häufig genutzt, also muss ich da durch.

Grüße Markus
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Die Wahl einer möglicherweise Ungeeigneten Datenstruktur dazu zu verwenden, dass man mit XML arbeiten kann, finde ich schon etwas seltsam. Und wenn du Erfahrung mit XML angeben möchtest, dann solltest du das Problem eigentlich lösen können, wenn man dich morgens um 3 Uhr aus dem Tiefschlaf weckt ;-) Aber zurück zu eigentlichen Thema:

Es kommt ein wenig darauf an, was du aus den gespeicherten Daten machen willst. Der einfachste Weg wäre natürlich, den bereits ausgegebenen String zu codieren und als String zu speichern. Wahrscheinlich ist das nicht die Lösung, die du anstrebst.

Ich würde so etwas in der Art machen:

Code: Alles auswählen

...
<dictionary>
    <element key="spam" value="eggs"/>
    <element key="foo" value="bar"/>
</dictionary>
...
Sinnvoll könnte auch die Formate

Code: Alles auswählen

...
<dictionary>
    <element key="spam">eggs</element>
    <element key="foo">bar</element>
</dictionary>
...
und

Code: Alles auswählen

...
<dictionary>
    <element>
        <key>spam</key>
        <value>eggs</value>
    </element>
    <element>
        <key>foo</key>
        <value>bar</value>
    </element>
</dictionary>
...
sein. Das hängt von der Komplexität der verwendeten Schlüssel und Werte ab.
Das Leben ist wie ein Tennisball.
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

EyDu hat geschrieben:Die Wahl einer möglicherweise Ungeeigneten Datenstruktur dazu zu verwenden, dass man mit XML arbeiten kann, finde ich schon etwas seltsam.
Willkommen im Club. Natürlich ist XML dafür völlig schwachsinnig, es dient ja nur als Referenz. Da ist alles erlaubt. Warum beschäftigen wir uns unser Leben lang mit "virtueller" Software, wo die Welt doch so viel schöne Sachen zu bieten hat. Zeit-Verschwendung. Die ganze Welt ist voller schwachsinniger Sachen. Als Handwerker habe ich gelernt Aufgaben auszuführen als Ingenieur hat man da mehr kreativen Freiraum, aber wenn der Kunde ein Kotelett an die Wand genagelt haben will, dann kriegt er das auch ohne zu Fragen! Im Laufe meines Lebens sind meine Fragen in weniger geworden und man akzeptiert Sachen eher. Meine Freundin macht 3 Knoten in die Schuhe ich weiß nicht warum. :mrgreen:

Grüße Markus
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Naja, wenn ich jemanden sehe der JSON in XML packt, dann denk ich mir eher "Hat der nen Knall?" und weniger "Oh, er kommt mit XML zurecht". Wenn du schon auf masochistische Lösungen stehst, habe ich aber das perfekte für dich: JSONx.
IBM quetscht JSON in XML und hat geschrieben:JSONx is an IBM® standard format to represent JSON as XML. JSONx conversion rules specify how a DataPower® service converts a JSON structure to JSONx (XML).
Damit hast du, ha, einen Enterprise-Standard zur Darstellung von Dictionaries als XML.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
deets

Leonidas hat geschrieben: Damit hast du, ha, einen Enterprise-Standard zur Darstellung von Dictionaries als XML.
*heul* das ich das noch erleben muss...
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Habe mir mal das Modul lxml angeschaut, könnte interessant sein.

Hier meine XML-Datei:

Code: Alles auswählen

<?xml version="1.0" ?>
<gruppe bezeichnung="Einstellung1" server="feld-server" client="feld-bertlap">
    <eintrag bezeichnung="Eigene Dateien">
        <benutzer user1="markus" user2="maria" user3="bernard" user4="kaiserbert"/>
        <Frage prevalue="von /home/" postvalue="/eigenedateien/"/>
        <exclude option="--exclude" arg="__thereIsNothingToExcludeInThisSourceButINeedAnEmptyExclude__"/>
        <client version="1" val1="/home/" val2="/eigenedateien/"/>
        <server version="1" val1="@"  val2=":/home/" val3="/eigenedateien/"/>
    </eintrag>
    <eintrag bezeichnung="Mozilla Firefox">
        <benutzer user1="markus" user2="maria" user3="bernard" user4="kaiserbert"/>
        <frage prevalue="von /home/" postvalue="/.mozilla/firefox/"/>
        <exclude option="--exclude" arg="__thereIsNothingToExcludeInThisSourceButINeedAnEmptyExclude__"/>
        <client version="1" val1="/home/" val2="/.mozilla/firefox/"/>
        <server version="1" val1="@" val2=":/home/" val3="/mozilla/firefox/"/>
    </eintrag>
</gruppe>
Hier würde ich gerne das Element mit dem Namen "gruppe" und der bezeichnung="Einstellung1" wählen und dann alle restlichen Attribute dieses Elements als Liste zurück geben. Falls mir das ganze zu sehr auf den Sack geht, verwerfe ich xml.

Grüße Markus
BlackJack

@feldmaus: Also zumindest die Benutzer gehören nicht als Attribute in das `<benutzer>`-Tag. Die Menge an Tags und Attributen sollte immer fest sein, damit man so ein Dokument zum Beispiel in einem Schema beschreiben kann. Auch mit XPath kommt man nur schwer an solche Daten mit dynamischen Attributnamen heran.

Was genau spricht nochmal gegen JSON? Die "Referenz" mal etwas mit XML gemacht zu haben ist Unsinn. Wenn Du Dich damit bewirbst, musst Du die Daumen drücken, dass beim Bewerbungsgespräch keine Fragen dazu kommen oder es später unangenehm auffällt, dass nicht wirklich XML-Kenntnisse vorliegen. Mal schnell eine Konfigurationsdatei in XML zusammengebastelt bringt einem jedenfalls kaum die Kenntnisse, die ein Arbeitgeber erwartet wenn man "XML-Kenntnisse" in eine Bewerbung schreibt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

BlackJack hat geschrieben:Mal schnell eine Konfigurationsdatei in XML zusammengebastelt bringt einem jedenfalls kaum die Kenntnisse, die ein Arbeitgeber erwartet wenn man "XML-Kenntnisse" in eine Bewerbung schreibt.
Richtig, da würde ich eher Namespaces, XML Schema/Relax-NG, XPath, XInclude, XSLT und Konsorten erwarten. Vielleicht noch kenntnis von populäreren XML-Formaten wie Atom, RSS und RDF.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

BlackJack hat geschrieben:@feldmaus: Also zumindest die Benutzer gehören nicht als Attribute in das `<benutzer>`-Tag. Die Menge an Tags und Attributen sollte immer fest sein, damit man so ein Dokument zum Beispiel in einem Schema beschreiben kann. Auch mit XPath kommt man nur schwer an solche Daten mit dynamischen Attributnamen heran.
Bei lxml gibt es eine Methode
http://infohost.nmt.edu/tcc/help/pubs/p ... items.html
mit der kann ich alle Attribute+keys auslesen, das wäre zumindest schon mal was.

Allerdings funktioniert mein Code nicht:

Code: Alles auswählen

    def ladeEinstellungen(self, bezeichnung="Einstellung1"):
        """Beschreibung"""
        for attribute in self.domDoc.findall("gruppe").items():
            print attribute
Abgesehen davon hat xml den Vortiel, dass ich die Textdatei per Hand leicht modifizieren kann, was nett ist und mir zur Zeit hilft so lange ich keine ausgeklügelte Schreib-Methode habe um meine Konfiguration zu speichern. Dieser Weg hat also auch sein angenehmes.
BlackJack

@feldmaus: Das man an die Attribute herankommen kann ist kein Argument dafür die so umzusetzen. Dadurch kann man sie immer noch nicht in einem Schema beschreiben. Könnte sein, das man da auch umständlich mit XPath heran kommt. Aber das ist einfach ein schlechter Entwurf.

Du hast Dir also JSON noch nicht einmal angeschaut. Oder findest Du das wirklich *schwieriger* mit einem Texteditor zu schreiben als XML? Dagegen finde ich XML den deutlich unangenehmeren Weg.
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Da hätte ich dann auch gleich eine Frage. Kann pickle/cpickle die nicht aufgelösten Variablen mit speichern?
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

BlackJack hat geschrieben:Du hast Dir also JSON noch nicht einmal angeschaut. Oder findest Du das wirklich *schwieriger* mit einem Texteditor zu schreiben als XML? Dagegen finde ich XML den deutlich unangenehmeren Weg.
Noch nicht, aber ich habe xml mit voller Absicht ausgewählt, es wird häufig danach gefragt. Mit JASON komme ich beim Bewerbungsgespräch nicht weit.

cpickle ist eigentlich was ich brauche, aber für Referenzen finde ich Xml oder Sql besser. Ich weiß nicht auf was für Jobs Ihr Auch bewirbt, aber bestimmt nicht auf Absolventen-Jobs! Wahrscheinlich irgendwelche hoch spezialisierten Jobs mit 20 Jahre Berufserfahrung. Ich bin auch kein Informatiker, für mich reichen erweiterte Grundlagen mit OOP und grundlegenden Datenbank-Kenntnissen in häufigen Datenbanken/Datenbank-Dateien wie z.b. XML und SQL völlig aus. Ich habe auf meinem Skill-Bogen noch nie was von JSON gelesen.

Mal so zur Info für Euch Festangestellten hier ein kleiner Auszug aus einem Skill-Plan von dem größten europäischen Personaldiesntleister für ingenieure, damit ihr wisst was in der freien Marktwirtschaft gefragt ist:
Programmiersprachen
Assembler
C
C++
C#
Java
Delphi
Visual Basic
HTML
XML
PHP
Javascript
Coco
Python
Perl
VBScript
Lotus Script
TCL/TK
ADA
Smalltalk
LabVIEW
MATLAB
Simulink
ABAP

Datenbanken
Oracle
MS-SQL Server
UDB/DB2
Informix
mySQL
Gupta/Zentura
Access
Sybase
ADABAS
IMS-DB
dBase
Progress
Postgress
SQL
PL/SQL
JSON zählt nicht dazu. Also lerne ich es auch nicht. Als Absolvent hoch spezialisierte Sprachen zu lernen ist Zeitverschwendung, außer man hat eine ganz spezielle Firma im Auge, bei der man gute Kontakte hat und die gerade einen Speziallisten brauchen für einen Bereich wo man sich sehr gut auskennt. Vor allen Dingen als Absolvent völlig Hirn-rissig.

Grüße Markus
BlackJack

@feldmaus: JSON ist nun wirklich kein exotisches Format mehr. Es hat bereits eine hohe Verbreitung und die wird IMHO auch eher zu- als abnehmen. Die "Gefahr" JSON über den Weg zu laufen steigt also. Im Grunde steht JSON sogar auf Deiner Liste, denn die Abkürzung steht für "JavaScript Object Notation"; es ist eine Untermenge von JavaScript. Und es ist einfach -- deutlich einfacher als XML. Es gibt Bibliotheken für alle gängigen Programmiersprachen. Bei Python sogar in der Standardbibliothek. Es ist "leichtgewichtiger" als XML.

Die Einstellung zum Lernen von Sachen die nicht auf irgendwelchen Listen stehen, ist übrigens nicht besonders intelligent. Der IT-Bereich verändert sich ständig, also sollte man auch immer ein Auge auf Sachen haben, die in Zukunft relevant werden könnten. JSON wird an vielen Stellen in der Web-Programmierung verwendet und bei einigen "NoSQL"-Datenbanken. Die haben momentan zum Beispiel einen kleinen Hype, der vielleicht zu etwas dauerhaftem wird. Auf der anderen Seite gibt es da draussen auch noch Unmengen an alter bis uralter Technologie, die immer noch Leute zum warten und teilweise auch weiterentwickeln braucht. Zu lernen wie man sich in exotische Sachen einarbeitet ist also keine Zeitverschwendung.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Oha, Coco noch vor Coffeescript? Ich glaub die Liste wurde mit Bogosort sortiert ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

@Leonidas: Ich habe doch jetzt tatsächlich eine Seite "zurückgeblättert" um zu sehen ob da wirklich CoffeeScript auf der Liste steht. :-) Das ist doch viel zu neu und abgefahren als dass man sich das anschauen sollte. Hirnrissig und reine Zeitverschwendung… ;-)
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Vor allen Dingen als Absolvent völlig Hirn-rissig.
Absolvent von was denn bitte. Würde mich nur mal interessieren...

Ich glaube deine Einstellung ist etwas merkwürdig. In Unternehmen werden kompetente Mitarbeiter gesucht. Kompetenz heißt u.A. das richtige Werkzeug für eine gestellte Aufgabe einzusetzen. Nicht irgendetwas was gerade weit oben in einer Liste (die nichts, aber auch gar nichts, mit der Problemstellung zu tun hat) steht. Eine Technologie (z.B. XML) verstehen heißt auch, verstehen wo deren Einsatz nicht passend ist.
So eine Liste sieht vielleicht toll auf einem Lebenslauf aus. Spätestens beim Vorstellungsgespräch fällt aber auf, wenn nicht du verstanden hast worüber du sprichst.

Wenn du unbedingt eine tolle Liste willst, würde ich eher diese empfehlen:
http://www.indiangeek.net/wp-content/up ... matrix.htm

MFG HerrHagen
feldmaus
User
Beiträge: 284
Registriert: Donnerstag 12. Oktober 2006, 16:48

Eigentlich will ich ja hier mehr über mein Python Problem sprechen als meine Lebens-Erfahrungen zu erzählen, aber vielleicht hilft es dem einen oder anderen.

Es ist nicht dumm Wichtiges von Unwichtigem zu sortieren, im Gegenteil es ist sehr schlau und dazu ist es auch nicht einfach. Es ist ein Balance-Akt in dem man sehr sorgfältig wählen muss. Gleiches gilt für den Lebenslauf. Nicht alles was man im Leben macht wird auch vom Arbeitgeber anerkannt. Wir leben in einer Leistungsgesellschaft und da zählt alles um seine Konkurrenten zu überbieten. Ich bin kein Freund dieser Leistungsgesellschaft, habe mich aber damit abfinden müssen. Die älteren unter Uns die zur Zeit in einer festen Stelle sitzen, sollten beten, dass sie diese behalten, wenn sie sich nicht auf dem freien Markt behaupten können.

Ich finde auch vieles schwachsinnig, vor allen Dingen diese psychologischen Tests beim Bewerbungsgespräch. "Viele Personalchefs und Taschenpsychologen glauben, die Körpersprache zu beherrschen oder besser: zu verstehen."(Zitat aus Das große Hesse/Schrader Bewerbungshandbuch, Körpersprache: Deutliche Aussagen ohne Worte, S. 522) Mich erinnert das auch an Zeiten wo auf dem Jahrmarkt in die Kugel geschaut wurde. :D

Die Skill-Liste von Personaldienstleister ist Realität und nix Außergewöhnliches. Diese entscheidet unter anderem über Vorstellungsgespräch Ja oder Nein.

Grüße Markus
Antworten