Tach,
sitze gerade an einem Projekt und komme nicht weiter.Vielleicht kann mir einer hier helfen
Aus einer XML Datei werden die einzelnen Komponente ausgelesen. Funktioniert prima! Dann sollen die ausgelesenen Werte in einer ArrayList abgespeichert werden und hier tritt
folgendes Problem auf:
Beim Speichern in die Liste wird der alte Wert überschrieben. d.h. Ich hab am Ende eine Liste, die doppelt so lang ist, als sie es eig sein sollte... und die nur aus dem letzten Wert in der XML Datei besteht.
Hab schon einiges probiert, hier ist eine der Varianten die nicht funktioniert^^
MfG Spirit
[XML]<?xml version="1.0"?>
<cocktails
xsi:noNamespaceSchemaLocation="rezeptmanager-schema.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<getraenk name="Sex on the Beach">
<zutat menge="5" preis="0,05" >Cranberry Juice </zutat>
<zutat menge="2" preis="0,2">Peach Brandy</zutat>
<zutat menge="5" preis="0,05">Orangensaft</zutat>
<zutat menge="4" preis="4">Wodka</zutat>
<zutat menge="3" preis="0,05">Apfelsaft</zutat>
<preis>10</preis>
<Zubereitung>Alle Zutaten zusammen mit einigen Eiswürfeln in den Shaker geben und kräftig schütteln. Die Mischung durch das Barsieb in ein Tumblerglas abgießen.</Zubereitung>
<Bewertung>8</Bewertung>
<alkoholfrei>true</alkoholfrei>
<bild>sex_on_the_beach.jpg</bild>
</getraenk>
<getraenk name="Pina Colada">
<zutat menge="1" preis="0,1">Sahne</zutat>
<zutat menge="6" preis="0,1">Kokosmilch</zutat>
<zutat menge="5" preis="0,05">Ananassaft</zutat>
<zutat menge="6" preis="0,2">Wodka</zutat>
<preis>8</preis>
<Zubereitung>Die Zutaten inklusive Eis im Shaker schütteln und in ein mit drei großen Eiswürfeln gefülltes Longdrinkglas abseihen. Das cremige Geheimnis einer Pina Colada ist der richtige Schuß Sahne. Wie bei vielen anderen Drinks kann man natürlich auch eine "leichtere" variante, ein Pina Colada Light mixen. Dazu braucht man je 2cl weißen und braunen Rum, nur 6 cl Ananassaft und 2 cl Kokosmilch, außerdem noch 3 cl Milch.</Zubereitung>
<Bewertung>7</Bewertung>
<alkoholfrei>true</alkoholfrei>
<bild>pina_colada_jpg</bild>
</getraenk>
<getraenk name="Coconut Kiss">
<zutat menge="2" preis="0,1">Sahne</zutat>
<zutat menge="3" preis="0,1">Kokosmilch</zutat>
<zutat menge="4" preis="0,05">Orangensaft</zutat>
<zutat menge="2" preis="0,05">Ananassaft</zutat>
<preis>8</preis>
<Zubereitung>Alle Zutaten mit Eiswürfeln im Shaker schütteln, dann durch das Barsieb in ein Longdrinkglas abseihen, das mit Crushed Ice gefüllt ist. Dieser Drink mag vielleicht etwas trivial erscheinen, schmeckt aber ganz nett. Also erst probieren, dann meckern...</Zubereitung>
<Bewertung>7</Bewertung
><alkoholfrei>true</alkoholfrei
><bild>coconut_kiss</bild
></getraenk>
</cocktails>
[/XML]
Klasse zum Auslesen der XML Datei
Klasse, die die Methoden abspeichern() und auslesen() definiert
Beschrebt den Aufbau einer Zutat
sitze gerade an einem Projekt und komme nicht weiter.Vielleicht kann mir einer hier helfen
Aus einer XML Datei werden die einzelnen Komponente ausgelesen. Funktioniert prima! Dann sollen die ausgelesenen Werte in einer ArrayList abgespeichert werden und hier tritt
folgendes Problem auf:
Beim Speichern in die Liste wird der alte Wert überschrieben. d.h. Ich hab am Ende eine Liste, die doppelt so lang ist, als sie es eig sein sollte... und die nur aus dem letzten Wert in der XML Datei besteht.
Hab schon einiges probiert, hier ist eine der Varianten die nicht funktioniert^^
MfG Spirit
[XML]<?xml version="1.0"?>
<cocktails
xsi:noNamespaceSchemaLocation="rezeptmanager-schema.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<getraenk name="Sex on the Beach">
<zutat menge="5" preis="0,05" >Cranberry Juice </zutat>
<zutat menge="2" preis="0,2">Peach Brandy</zutat>
<zutat menge="5" preis="0,05">Orangensaft</zutat>
<zutat menge="4" preis="4">Wodka</zutat>
<zutat menge="3" preis="0,05">Apfelsaft</zutat>
<preis>10</preis>
<Zubereitung>Alle Zutaten zusammen mit einigen Eiswürfeln in den Shaker geben und kräftig schütteln. Die Mischung durch das Barsieb in ein Tumblerglas abgießen.</Zubereitung>
<Bewertung>8</Bewertung>
<alkoholfrei>true</alkoholfrei>
<bild>sex_on_the_beach.jpg</bild>
</getraenk>
<getraenk name="Pina Colada">
<zutat menge="1" preis="0,1">Sahne</zutat>
<zutat menge="6" preis="0,1">Kokosmilch</zutat>
<zutat menge="5" preis="0,05">Ananassaft</zutat>
<zutat menge="6" preis="0,2">Wodka</zutat>
<preis>8</preis>
<Zubereitung>Die Zutaten inklusive Eis im Shaker schütteln und in ein mit drei großen Eiswürfeln gefülltes Longdrinkglas abseihen. Das cremige Geheimnis einer Pina Colada ist der richtige Schuß Sahne. Wie bei vielen anderen Drinks kann man natürlich auch eine "leichtere" variante, ein Pina Colada Light mixen. Dazu braucht man je 2cl weißen und braunen Rum, nur 6 cl Ananassaft und 2 cl Kokosmilch, außerdem noch 3 cl Milch.</Zubereitung>
<Bewertung>7</Bewertung>
<alkoholfrei>true</alkoholfrei>
<bild>pina_colada_jpg</bild>
</getraenk>
<getraenk name="Coconut Kiss">
<zutat menge="2" preis="0,1">Sahne</zutat>
<zutat menge="3" preis="0,1">Kokosmilch</zutat>
<zutat menge="4" preis="0,05">Orangensaft</zutat>
<zutat menge="2" preis="0,05">Ananassaft</zutat>
<preis>8</preis>
<Zubereitung>Alle Zutaten mit Eiswürfeln im Shaker schütteln, dann durch das Barsieb in ein Longdrinkglas abseihen, das mit Crushed Ice gefüllt ist. Dieser Drink mag vielleicht etwas trivial erscheinen, schmeckt aber ganz nett. Also erst probieren, dann meckern...</Zubereitung>
<Bewertung>7</Bewertung
><alkoholfrei>true</alkoholfrei
><bild>coconut_kiss</bild
></getraenk>
</cocktails>
[/XML]
Klasse zum Auslesen der XML Datei
Java:
import java.io.IOException;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
public class Verwaltung {
public static void main(String[] args) throws IOException {
String filename = "rezeptmanager_für_cocktails100.xml";
//Erstellung JDOM-Dokument
String menge = "";
Document doc = new Document();
Cocktail neu = new Cocktail("", null, 0, "", 0, false, "");
Zutaten zutat = new Zutaten(menge, 0, 0);
//liest die datei ein
try {
doc = new SAXBuilder().build(filename);
} catch (JDOMException exc) {
exc.printStackTrace();
} catch (IOException exc) {
exc.printStackTrace();
}
Element cocktails = doc.getRootElement();
List<Element> componentList = cocktails.getChildren();
//wurzelelement cocktails dient als ausgangspunkt für die weitere
//verarbeitung der datei
int stelle = 0;
for (Element component : componentList) {
List<Element> cocktail = component.getChildren();
for(Element component2 : cocktail) {
String getraenk = component2.getText();
if(component2.getAttributeValue( "menge" ) != null) {
menge = component2.getAttributeValue( "menge" );
zutat.setName(getraenk);
int anzahl = Integer.parseInt(menge);
zutat.setMenge(anzahl);
getraenk = "";
} else {
menge = "";
}
Listen.abspeichern(stelle, zutat);
stelle++;
//System.out.println(Listen.auslesen());
//System.out.println(getraenk + " " + menge);
}
System.out.println(Listen.auslesen());
}
System.out.println(Listen.auslesen());
}
}
Klasse, die die Methoden abspeichern() und auslesen() definiert
Java:
import java.util.ArrayList;
import org.jdom.Element;
//Allgemeine Programmklasse
public class Listen {
//Liste zum Speichern der Cocktails
public static ArrayList<Cocktail> cocktailliste = new ArrayList<>();
//Liste zum Speichern der Zutatenmuster
public static ArrayList<Zutaten> zutatenliste = new ArrayList<>();
//Kosten kalkulieren
public double Kosten(Cocktail cocktail) {
double preis = 0;
cocktail.getZutaten();
// Elemente durchgehen und Menge mit Preis multiplizieren
// Hier fehlt noch einiges
return preis;
}
public static void abspeichern(int stelle, Zutaten zutat) {
zutatenliste.add(stelle ,zutat);
}
public static ArrayList<Object> auslesen() {
ArrayList<Object> liste = new ArrayList<Object>();
for(int i = 0; i < zutatenliste.size();i++) {
liste.add(zutatenliste.get(i));
}
return liste;
}
}
Beschrebt den Aufbau einer Zutat
Java:
public class Zutaten {
private int menge;
private float preis;
private String name;
public Zutaten(String name, int menge, float preis) {
super();
this.menge = menge;
this.preis = preis;
this.name = name;
}
public int getMenge() {
return menge;
}
public void setMenge(int menge) {
this.menge = menge;
}
public float getPreis() {
return preis;
}
public void setPreis(float preis) {
this.preis = preis;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
String string = null;
string = "• " + getName() + " (" + getMenge() + " ml/g" + ")";
return string;
}
}