XML Datei in ArrayList abspeichern

Spiri

Mitglied
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
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;
    }
    
}
 
S

SlaterB

Gast
Klassen bevorzugt und recht wichtig nach Einzahl benennen, und hier ist Zutat doch sicher nur eine Zutat,
während Listen ja noch mehrere enthält..

du verwendest ständig ein und dasselbe Zutat-Objekt, wenn es gesetzt und eingefügt ist brauchst du fürs nächste ein neues

kopiere Zeile 20
> Zutaten zutat = new Zutaten(menge, 0, 0);
nach Zeile 40 oder so,
dann könnte es vielleicht schon besser werden, in der Schleife immer neu erzeugen,

der Leerstring menge, der dabei bisher übergeben wird, ist wohl Quatsch?
kann ja vorkommen bei der Programmierung, aber räume ruhig auf bevor du hier was postest, das verwirrt doch nur,
jede Code-Zeile muss jederzeit einen erklärbaren Sinn haben


------

warum evtl. noch was doppelt ist kann ich jetzt nicht mehr nachschauen, bin nun leider auch länger weg,
reduziere doch ein Test-XML auf einen Eintrag und schaue nach wann wo wie oft eingefügt wird

> Listen.abspeichern(stelle, zutat);
> stelle++;

bei Listen kann man mit add() einfach ans Ende einfügen, mitzählen unnötig?
 
B

BOBOHelp

Gast
hallo, hast du schon ein anderen weg probiert!. ich mache generiere mir eine xsd-file, dann mit xjc erzeuge alle klasse und factory und dann mit jaxb berarbeiten, da braucht man sich (fast) um nichts kümmern. hier eine xsd:
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="cocktails" type="cocktailsType"/>
<xs:complexType name="getraenkType">
<xs:sequence>
<xs:element type="zutatType" name="zutat" maxOccurs="unbounded" minOccurs="0"/>
<xs:element name="preis">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="10"/>
<xs:enumeration value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Zubereitung">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="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."/>
<xs:enumeration value="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 &quot;leichtere&quot; 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."/>
<xs:enumeration value="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..."/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Bewertung">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="8"/>
<xs:enumeration value="7"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element type="xs:string" name="alkoholfrei"/>
<xs:element name="bild">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="sex_on_the_beach.jpg"/>
<xs:enumeration value="pina_colada_jpg"/>
<xs:enumeration value="coconut_kiss"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="name" use="optional"/>
</xs:complexType>
<xs:complexType name="cocktailsType">
<xs:sequence>
<xs:element type="getraenkType" name="getraenk" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="zutatType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="menge" use="optional"/>
<xs:attribute type="xs:string" name="preis" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:schema>
[/XML]
 

Spiri

Mitglied
Danke für die schnellen Antworten! Habe die Zeile umkopiert und funktioniert jetzt! :) Das mit der Menge diente nur einem Testlauf in der Konsole, um zu sehen ob die Komponenten überhaupt richtig ausgelesen werden^^

MfG Spirit
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
I ArrayList - Methode zum Speichern eines Eintrags in einer Datei Java Basics - Anfänger-Themen 17
M ArrayList durch OutputStream in Datei Java Basics - Anfänger-Themen 9
S Arraylist in Datei speichern Java Basics - Anfänger-Themen 8
S ArrayList in eine Txt-Datei speichern Java Basics - Anfänger-Themen 3
C Input/Output Inhalte von ArrayList und JList in Datei schreiben Java Basics - Anfänger-Themen 5
N XML-Datei in eine ArrayList Java Basics - Anfänger-Themen 6
P ArrayList in Datei schreiben Java Basics - Anfänger-Themen 5
C Arraylist in Txt Datei speichern und auslesen Java Basics - Anfänger-Themen 8
L ArrayList über Methode in Datei schreiben Java Basics - Anfänger-Themen 13
T ArrayList in Datei speichern und auslesen Java Basics - Anfänger-Themen 7
X Aus XML Datei Objekte in Arraylist laden - Fehler! Java Basics - Anfänger-Themen 9
H Objekte aus Text-Datei wieder in ArrayList laden Java Basics - Anfänger-Themen 8
B Objekte aus Datei auslesen und in ArrayList schreiben! Java Basics - Anfänger-Themen 25
J CSV Datei in ArrayList speichern Java Basics - Anfänger-Themen 3
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
E Audio Datei unter Bedingungen ausführen Java Basics - Anfänger-Themen 19
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
A exe Datei erstellen Java Basics - Anfänger-Themen 8
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
P Aus Text Datei nur Zahlen übernehmen Java Basics - Anfänger-Themen 13
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
W Fehler in der Datei pom.xml Java Basics - Anfänger-Themen 19
M Verständnisfrage: Warum wird die Datei ohne Inhalt übertragen Java Basics - Anfänger-Themen 3
D Jar Datei startet unter Linux nicht Java Basics - Anfänger-Themen 3
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
E TIF Datei auslesen Java Basics - Anfänger-Themen 2
B von Java/Eclipse verwendete Datei existiert gar nicht? Java Basics - Anfänger-Themen 6
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
B Popups mit Klicksabfangen zumAusfüllen einer .ods Datei Java Basics - Anfänger-Themen 0
M Daten aus .txt Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 80
M RandomAccessFile int und String gleichzeitig in einer Datei Java Basics - Anfänger-Themen 49
I Datei (Bild) Drucken und wie Druckeinstellung speichern? Java Basics - Anfänger-Themen 3
A CSV-Datei Verarbeiten Java Basics - Anfänger-Themen 8
D Downloadfortschritt von Datei über Google Drive API v3 Java Basics - Anfänger-Themen 10
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
S In Datei schreiben in Java? Java Basics - Anfänger-Themen 1
Saiko Zeilen einer Datei einlesen Java Basics - Anfänger-Themen 3
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
sserio Txt Datei einlesen Java Basics - Anfänger-Themen 9
T Printwriter Datei nicht überschreiben Java Basics - Anfänger-Themen 10
berserkerdq2 An selbst ersteller txt Datei immer Text dranhängen, ohne den vorherign Text zu löschen Java Basics - Anfänger-Themen 8
berserkerdq2 Wie gebe ich den Pfad zu einer Datei an, die in einem Ordner in Eclipse ist? Java Basics - Anfänger-Themen 1
D Strings aus Excel-Datei einlesen Java Basics - Anfänger-Themen 2
M Text in Datei schreiben Java Basics - Anfänger-Themen 9
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
J selbst erstellte Datei mit Programm öffnen Java Basics - Anfänger-Themen 10
J int innerhalb einer Datei ändern Java Basics - Anfänger-Themen 1
T208 Text Datei individuell benennen. Java Basics - Anfänger-Themen 5
julian112 Input/Output .gz bzw. .txt Datei Einlesen und Umgang mit Exceptions Java Basics - Anfänger-Themen 1
F Aus eingelesener Datei korrekt Objekte erzeugen Java Basics - Anfänger-Themen 5
E extern Datei von meinem Computer aufmachen Java Basics - Anfänger-Themen 5
H Scripte oder Programmcode aus Datei lesen? Java Basics - Anfänger-Themen 5
E PDF Datei im xfdf-Datei umwandeln und auf dem Laufwerk ablegen Java Basics - Anfänger-Themen 0
J CSV-Datei verarbeiten Java Basics - Anfänger-Themen 27
A Verarbeiten einer Excel Datei durch das java-Programm Java Basics - Anfänger-Themen 3
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
nbergmann Installation unter jdk.java.net: Keine ZIP-Datei zum entpacken Java Basics - Anfänger-Themen 2
J Datei aus Netzwerk auslesen Java Basics - Anfänger-Themen 9
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
EchtKeineAhnungManchmal Controller aus FXML Datei entfernen Java Basics - Anfänger-Themen 49
I Probleme mit OutputStream - Datei lässt sich nicht öffnen Java Basics - Anfänger-Themen 4
Kotelettklopfer Sqlite DB aus Java Datei ansprechen. Java Basics - Anfänger-Themen 147
C XML Datei speichern und laden Java Basics - Anfänger-Themen 18
M Von einem Menü Methode aus anderer Klasse ausführen, die errechnete Werte in Datei schreibt. Java Basics - Anfänger-Themen 8
C XML Datei schreiben Java Basics - Anfänger-Themen 14
S Zufällige ungerade Zeile aus Text-Datei lesen Java Basics - Anfänger-Themen 5
J Wert in einer json Datei ändern und speichern Java Basics - Anfänger-Themen 3
L Java erstellt leere Datei Java Basics - Anfänger-Themen 8
J Json Datei auslesen Java Basics - Anfänger-Themen 4
J In main() Datei geöffnet, von anderer Funktion beschreiben Java Basics - Anfänger-Themen 3
I JAX-WS.... Datei ".ical" zurückgeben.... Wie annotieren? Java Basics - Anfänger-Themen 1
O zweidimensionales array in eine csv-Datei Java Basics - Anfänger-Themen 1
CptK Richtigen Pfad beim einlesen von Datei finden Java Basics - Anfänger-Themen 2
E Pfadangaben bei Ausführbarer Jar Datei Java Basics - Anfänger-Themen 8
J Input/Output Konstruktor ergänzen, der zur Datei mit einem Objekt passt Java Basics - Anfänger-Themen 0
I Datei als Stream aus Ressource laden? Java Basics - Anfänger-Themen 2
LetsSebi Methode, die einen arry von objekten speichert in einer datei Java Basics - Anfänger-Themen 6
R Wie installiere ich Jdownloadersetup.sh datei mit debian Java Basics - Anfänger-Themen 2
J Csv-Datei einlesen Java Basics - Anfänger-Themen 52
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
W Java in Exe Datei umgewandelt, Ressourcen fehlen (Bilder und Audiodateien) Java Basics - Anfänger-Themen 1
A Fehler beim Ausführen einer class Datei Java Basics - Anfänger-Themen 6
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
S CSV Datei auslesen und anders darstellen Java Basics - Anfänger-Themen 2
O zufälliges Wort aus einer Datei einlesen Java Basics - Anfänger-Themen 32
E Input/Output Datei anhand von Dateinamen einlesen Java Basics - Anfänger-Themen 5
C Datei über relative Pfade einlesen Java Basics - Anfänger-Themen 6
F Auto String mit Array Name aus Datei... oder so ähnlich Java Basics - Anfänger-Themen 4
O Best Practice Datei-Pfad zerlegen Java Basics - Anfänger-Themen 4
N Java CSV Datei auslesen Java Basics - Anfänger-Themen 6
J Ein Wort aus einer Datei zufällig ermitteln Java Basics - Anfänger-Themen 3
S Verbindung von einer Excel Datei zu Java-- Java Basics - Anfänger-Themen 4
G In Datei schreiben Java Basics - Anfänger-Themen 1
J Klassen .class Datei öffnen Java Basics - Anfänger-Themen 31

Ähnliche Java Themen

Neue Themen


Oben