Absoluter Anfänger: XML-Datei einlesen
Verfasst: Dienstag 17. Mai 2022, 22:10
Hallo Forum-Mitglieder,
ich bin absoluter Neuling in Sachen Programmierung, möchte aber nichts desto trotz, eine Art "XML-Editor App" für eine Maschine programmieren.
Ich habe mich bisher in das ein oder andere durchgelesen (XML, Namespace, Elementree etc.) und versucht anhand von Beispielen, es für mich umzusetzen, aber vieles ist für mich nicht verständlich
Als erstes möchte ich die unten aufgelistete xml-Datei laden und in irgendeiner Form (komplette Werte / einzelne Werte) vorerst auf dem Bildschirm ausgeben.
Die XML sieht so aus und darf in ihrer Struktur auch nicht geändert werden:
<?xml version="1.0" encoding="utf-8"?>
<Database xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Cocktaibase>
<Bottles>
<Bottle name="Ananassaft" volume="750" fillLevel="735" position="6" image="Granini_Ananas.png" isActive="true" category="Juice">
<Calibration name="Ananas Cal" openingTime="9609" volume="100" />
</Bottle>
<Bottle name="Orangensaft" volume="1000" fillLevel="950" position="1" image="Granini_Orange.png" isActive="true" category="Juice">
<Calibration name="Orangensaft Cal" openingTime="8046" volume="100" />
</Bottle>
</Bottles>
<Cocktails>
<Cocktail name="Alice NA+" image="100_Alice.png" isFavorite="false" mix="Alice NA+" cocktailCounter="0">
<Preparation name="" text="Glas mit 4 Eiswürfel füllen + Sahne" />
</Cocktail>
<Cocktail name="Annabella NA" image="101_Annabella.png" isFavorite="false" mix="Annabella NA" cocktailCounter="0">
<Preparation name="" text="1/2 Glas Crushed Ice" />
</Cocktail>
</Cocktails>
<Mixes>
<Mix name="Alice NA+">
<MixStep name="Orangensaft" bottle="Orangensaft" volume="50" waitUntilDone="false" />
<MixStep name="Ananassaft" bottle="Ananassaft" volume="50" waitUntilDone="false" />
<MixStep name="Grenadine" bottle="Grenadine" volume="20" waitUntilDone="false" />
</Mix>
<Mix name="Annabella NA">
<MixStep name="Oragensaft" bottle="Orangensaft" volume="60" waitUntilDone="false" />
<MixStep name="Ananassaft" bottle="Ananassaft" volume="51" waitUntilDone="false" />
<MixStep name="Grenadine" bottle="Grenadine" volume="30" waitUntilDone="false" />
<MixStep name="Sahne" bottle="Sahne" volume="10" waitUntilDone="false" />
</Mix>
</Mixes>
<Settings>
<Setting name="isImagesOn" value="1" />
<Setting name="manualMenu" value="1" />
</Settings>
</Cocktailbase>
</Database>
Mein Hauptziel ist es, um es für euch auch verständlicher zu machen....ein grafische Oberfläche/ Programm zu erstellen, mit dem man die XML einliest, Flaschen einpflegen, löschen und ändern etc. kann. Das gleiche noch mit Cocktails und Mixe. Zudem soll eine Beziehung zwischen "Cocktail-Name" und "Mix-Name" stehen, sowie "bottle-name"und "Mixstep-bottle". Damit man dann im Programm, wenn man ein Cocktail aufruft, sieht welche Flaschen notwendig sind, wie sich der Cocktails aus wieviel und zusammen setzt usw. ……also im Endeffekt eine komfortable Editierbarkeit von einer Oberfläche aus..
So weit, so gut....ich weiß es wird ein langer Weg.........
Bisher hatte ich versucht, mit diesen Zeilen etwas aus der XML zu entlocken und bekomme bis jetzt nur die Tag’s angezeigt:
import xml.etree.ElementTree as ET
tree = ET.parse('database.xml')
root = tree.getroot()
for x in root.findall('.//Bottle'):
print(x.tag)
Aber bekomme es nicht hin die Element und ihre Attribute zusammenhängend an zu zeigen ( bzw. in einem array zu speichern)?
Z. Bsp.:
Bottles
|
Bottle
|-- Bottel Name = Ananasaft
|-- Volume = 750
|-- filllevel = 735
|-- position = 6
|-- image= Granini_Ananas.png
|-- isActive= true
|-- category =Juice
|-- Calibration name= Ananas Cal
|-- openingTime=9609
|-- volume=100
.......
Cocktails
|
Cocktail
|-- Cocktail name=Alice NA+
|-- image= 100_Alice.png
|-- mix=Alice NA+
|-- Preparation name=""
|-- text=Glas mit 4 Eiswürfel füllen + Sahne
|-- cocktailCounter= 0
usw........
Könntet jemand hier weiterhelfen bzw. einen Tip geben wie man am besten dran geht !
Vielen Dank
Gruss Marcus
ich bin absoluter Neuling in Sachen Programmierung, möchte aber nichts desto trotz, eine Art "XML-Editor App" für eine Maschine programmieren.
Ich habe mich bisher in das ein oder andere durchgelesen (XML, Namespace, Elementree etc.) und versucht anhand von Beispielen, es für mich umzusetzen, aber vieles ist für mich nicht verständlich
Als erstes möchte ich die unten aufgelistete xml-Datei laden und in irgendeiner Form (komplette Werte / einzelne Werte) vorerst auf dem Bildschirm ausgeben.
Die XML sieht so aus und darf in ihrer Struktur auch nicht geändert werden:
<?xml version="1.0" encoding="utf-8"?>
<Database xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Cocktaibase>
<Bottles>
<Bottle name="Ananassaft" volume="750" fillLevel="735" position="6" image="Granini_Ananas.png" isActive="true" category="Juice">
<Calibration name="Ananas Cal" openingTime="9609" volume="100" />
</Bottle>
<Bottle name="Orangensaft" volume="1000" fillLevel="950" position="1" image="Granini_Orange.png" isActive="true" category="Juice">
<Calibration name="Orangensaft Cal" openingTime="8046" volume="100" />
</Bottle>
</Bottles>
<Cocktails>
<Cocktail name="Alice NA+" image="100_Alice.png" isFavorite="false" mix="Alice NA+" cocktailCounter="0">
<Preparation name="" text="Glas mit 4 Eiswürfel füllen + Sahne" />
</Cocktail>
<Cocktail name="Annabella NA" image="101_Annabella.png" isFavorite="false" mix="Annabella NA" cocktailCounter="0">
<Preparation name="" text="1/2 Glas Crushed Ice" />
</Cocktail>
</Cocktails>
<Mixes>
<Mix name="Alice NA+">
<MixStep name="Orangensaft" bottle="Orangensaft" volume="50" waitUntilDone="false" />
<MixStep name="Ananassaft" bottle="Ananassaft" volume="50" waitUntilDone="false" />
<MixStep name="Grenadine" bottle="Grenadine" volume="20" waitUntilDone="false" />
</Mix>
<Mix name="Annabella NA">
<MixStep name="Oragensaft" bottle="Orangensaft" volume="60" waitUntilDone="false" />
<MixStep name="Ananassaft" bottle="Ananassaft" volume="51" waitUntilDone="false" />
<MixStep name="Grenadine" bottle="Grenadine" volume="30" waitUntilDone="false" />
<MixStep name="Sahne" bottle="Sahne" volume="10" waitUntilDone="false" />
</Mix>
</Mixes>
<Settings>
<Setting name="isImagesOn" value="1" />
<Setting name="manualMenu" value="1" />
</Settings>
</Cocktailbase>
</Database>
Mein Hauptziel ist es, um es für euch auch verständlicher zu machen....ein grafische Oberfläche/ Programm zu erstellen, mit dem man die XML einliest, Flaschen einpflegen, löschen und ändern etc. kann. Das gleiche noch mit Cocktails und Mixe. Zudem soll eine Beziehung zwischen "Cocktail-Name" und "Mix-Name" stehen, sowie "bottle-name"und "Mixstep-bottle". Damit man dann im Programm, wenn man ein Cocktail aufruft, sieht welche Flaschen notwendig sind, wie sich der Cocktails aus wieviel und zusammen setzt usw. ……also im Endeffekt eine komfortable Editierbarkeit von einer Oberfläche aus..
So weit, so gut....ich weiß es wird ein langer Weg.........
Bisher hatte ich versucht, mit diesen Zeilen etwas aus der XML zu entlocken und bekomme bis jetzt nur die Tag’s angezeigt:
import xml.etree.ElementTree as ET
tree = ET.parse('database.xml')
root = tree.getroot()
for x in root.findall('.//Bottle'):
print(x.tag)
Aber bekomme es nicht hin die Element und ihre Attribute zusammenhängend an zu zeigen ( bzw. in einem array zu speichern)?
Z. Bsp.:
Bottles
|
Bottle
|-- Bottel Name = Ananasaft
|-- Volume = 750
|-- filllevel = 735
|-- position = 6
|-- image= Granini_Ananas.png
|-- isActive= true
|-- category =Juice
|-- Calibration name= Ananas Cal
|-- openingTime=9609
|-- volume=100
.......
Cocktails
|
Cocktail
|-- Cocktail name=Alice NA+
|-- image= 100_Alice.png
|-- mix=Alice NA+
|-- Preparation name=""
|-- text=Glas mit 4 Eiswürfel füllen + Sahne
|-- cocktailCounter= 0
usw........
Könntet jemand hier weiterhelfen bzw. einen Tip geben wie man am besten dran geht !
Vielen Dank
Gruss Marcus