Seite 1 von 1

XML Datei erzeugen

Verfasst: Freitag 9. Mai 2014, 09:12
von juli01
Hallo :)
Ich programmiere im Moment an eine kleinen Programm und ich bekomme meine Variablen per Tkinter Eingabefeld.
Diese Variablen (z.B. Zeit Abfrage, Teams Abfrage für ein Volleyball Turnierplaner) wollte ich jetzt als XML Datei speichern, damit ich sie später wieder aufrufen kann. Es soll ungefähr diese Form haben:

Code: Alles auswählen

<xml>

<Dateiname>
                  <zeit>
                           Variable
                  </zeit>
                  <teams>
                           Teamname 1
                           Teamname 2
                           usw.
                  </teams>
</Dateiname>
Leider habe ich kaum Ahnung von XML deshalb schreibe ich dies hier.
So etwas habe ich bereits:

Code: Alles auswählen

# Dokument erzeugen
global name
implement = xml.dom.getDOMImplementation()
doc = implement.createDocument(None, name, None)

# Child Element "Zeit"
elem = doc.createElement("Zeit")
elem.setAttribute("output", "yes")
text = doc.createTextNode(zeit)
elem.appendChild(text)

# Child Element "Teams"
elem = doc.createElement("Teams")
elem.setAttribute("output", "yes")
text = doc.createTextNode(team_name)
elem.appendChild(text)
Leider gibt mir dies Fehler aus... Bitte um Hilfe

Re: XML Datei erzeugen

Verfasst: Freitag 9. Mai 2014, 09:22
von Hyperion
Muss es denn XML sein? Wenn Du JSON benutzen könntest, wäre das alles viel einfacher!

Deine XML-Struktur passt so hinten und vorne noch nicht! Unter dem Tag <teams> würde ich jetzt ein Tag <team> erwarten, welcher den Team-Namen beinhaltet. (Ob als Text-Knoten oder Attribut, darüber kann man nun vortrefflich streiten :-D )

Was bewirkt das Tag <Dateiname>? (Und wieso wird dieses groß geschrieben im Gegensatz zum Rest?)

Beim XML solltest Du DOM vergessen und stattdessen die ElementTree-API nutzen. In der Standard-Lib gibt es dazu eine fertige Bibliothek; wenn's mehr Funktionalität bedarf grif zum externen und exzellenten ``lxml``-Modul.

Und wenn Du einen Fehler bekommst, dann *nenn* ihn uns auch ;-) Dann müssen wir hier nicht raten!

Ich würde es ja mit JSON angehen :-)

Im übrigen wäre das Thema unter "Allgemeine Fragen" besser aufgehoben; Tk ist hier ja nur Kontext und nicht inhaltlich relevant ;-)

Re: XML Datei erzeugen

Verfasst: Freitag 9. Mai 2014, 09:33
von juli01
Wie würdest du denn mit JSON arbeiten? Ich kenn mich mit dem Speichern von Dateien mit Python überhaupt nicht aus und ich benutze XML nur, weil meine Informatiklehrer es empfohlen haben. Es soll wohl relativ leicht sein, XML Dateien zu erstellen, speichern und dan wieder aufzurufen.

Re: XML Datei erzeugen

Verfasst: Freitag 9. Mai 2014, 09:50
von /me
juli01 hat geschrieben:Wie würdest du denn mit JSON arbeiten? Ich kenn mich mit dem Speichern von Dateien mit Python überhaupt nicht aus und ich benutze XML nur, weil meine Informatiklehrer es empfohlen haben.
Wenn du den Umgang mit Dateien nicht kennst, dann bist du wohl im Tutorial noch nicht an der entsprechenden Stelle vorbeigekommen: Reading and Writing Files. Die Daten, die du dann in die Datei schreibst bzw. daraus liest sind dann in JSON verpackt.

Re: XML Datei erzeugen

Verfasst: Freitag 9. Mai 2014, 11:15
von Hyperion
Wenn Deine Teams als Liste vorliegen, wäre die Erzeugung von JSON z.B. so einfach:

Code: Alles auswählen

from datetime import datetime
import json

teams = ["Anaheim Mighty Ducks", "Hamburger SV", "Pythoniacs"]

team_data = {
"time": str(datetime.now()),
"teams": teams
}

team_data

json.dumps(team_data)

> '{"time": "2014-05-09 12:10:55.221376", "teams": ["Anaheim Mighty Ducks", 
"Hamburger SV", "Pythoniacs"]}'
Das Laden geht genauso einfach:

Code: Alles auswählen

dumped_data = json.dumps(team_data)

# hier holen wir aus dem *String* wieder Python-Objekte:
loaded_data = json.loads(dumped_data)

loaded_data
> {'teams': ['Anaheim Mighty Ducks', 'Hamburger SV', 'Pythoniacs'],
 'time': '2014-05-09 12:10:55.221376'}

# wir können mal prüfen, ob die aus dem String geholten Daten mit den
# Originaldaten übereinstimmen:
loaded_data == team_data
> True
Da Du wirklich mit Dateien arbeiten willst, gibt es die ``dump`` und ``load``-Funktionen des ``json``-Moduls. Diese haben einen Parameter, bei dem Du das geöffnete Dateiobjekt übergeben kannst.

So einfach kann das also sein :-)

Re: XML Datei erzeugen

Verfasst: Freitag 9. Mai 2014, 11:50
von cofi
Erstmal willkommen im Forum ;)

Ich wuerde dir auch empfehlen von XML Abstand zu nehmen, wenn du das Format und den Umgang (der gewoehnungsbeduerftig ist) damit noch nicht kennst.

Der Umgang mit JSON ist dagegen sehr nahe an Python und die gespeicherten Dateien sehen auch aehnlich wie das aus was man in Python gewoehnt ist.