XML - Buch mit 7 Siegeln

Status
Nicht offen für weitere Antworten.

chrgai

Mitglied
Moin.
Ich habe ein Programm, das verschiedene Objekte verwaltet. Bisher habe ich die Daten in einer CSV-Datei
gespeichert, und daraus ausgelesen (CSV = Comma Separated Value, d.h. das zwischen den Werten ein Komma ist).
Pro Objekt habe ich eine Zeile in der Textdatei.
Nun möchte ich die Datenquelle auf xml umstellen. Sie soll in etwa so aussehen:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<Datenbank>
  <Objekt>
    <Var1>1234</Var1>
    <Var2>5678</Var2>
    .......
  </Objekt>
  <Objekt>
    .........
  </Objekt>
</Datenbank>
Mit der CSV-Datei war das kein Problem. Die Objekte wurden über die Zeile erkannt, die Werte (Var1, Var2 usw.)
mit Komma seperiert.
Nun möchte ich das aber wie schon gesagt in xml realisieren. Die Daten sollen nach dem auslesen in einem
Vector (Vector<Object>) landen. Auch zum speichern übergebe ich derzeit nur den Vector. In allen
Tutorials werden aber die Objeke mit Ihren Tags angesprochen, was bei mir nicht geht, da es beliebig
viele Objekte sein sollen. Jedes Objekt in der XML-Datei soll auch ein Java-Objekt sein. Das zuweisen
der einzelnen Variablenwerte wird über die settermethoden der Objekte realisiert.
Ich habe schon 2 Tage lang alle möglichen Tutorials durchgelesen, aber nichts wirklich einfaches und vor
allem passendes gefunden.
Bin für jede Hilfe dankbar.

/christian
 

chrgai

Mitglied
Ich habe mal einen ersten Lösungsansatz erarbeitet. Leider funzt der Code nocht nicht.
Code:
try {
            File file = new File("datenbank.xml");
            Vector<datensatz> dat = new Vector<datensatz>();
            DocumentBuilder builder =
                    DocumentBuilderFactory.newInstance().newDocumentBuilder();
            Document doc = builder.parse(file);
            NodeList datensaetze = doc.getElementsByTagName("Datensatz");
            for (int i = 0; i < datensaetze.getLength(); i++) {
                Datensatz a = new Datensatz();
                Element element = (Element)datensaetze.item(i);
                a.setName(element.getAttribute("Name"));
                a.setHaarfarbe(element.getAttribute("Haarfarbe"));
                dat.add(a);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
Die xml-datei würde dann z.B. so aussehen:
Code:
<?xml version="1.0" encoding="UTF-8"?> 
<Datensatz>
   <Name>Bernd</Name>
   <Haarfarbe>Braun</Haarfarbe>
</Datensatz>
<Datensatz>
   <Name>Norbert</Name>
   <Haarfarbe>Blond</Haarfarbe>
</Datensatz>

Leider leider funktioniert das einlesen nicht. Es wird zwar ein Objekt im Vector gespeichert,
aber es enthält keine Daten?!?

/christian
 

Noar

Bekanntes Mitglied
Müssen die Elementnamen evtl. in korrekter Schreibweise abgefragt werden? Du Holst das Element mit dem Namen "datensatz", im XML gibt es aber nur "Datensatz". Groß- keinschreibung beachten?
 
R

Roar

Gast
deine xml datei ist nicht well-formed, das heißt sie wird nichtmal geparst. außerdem sind Name und Haarfarbe keine attribute von Datensatz sondern kind-elemente (außerdem s. noars einwand)
 

Wolfgang Lenhard

Bekanntes Mitglied
Wenn es Dir nur darum geht, Objekte in XML zu serialisieren und deserialisieren, dann erspart Dir XStream (xstream.codehaus.org) viel Arbeit.
 

chrgai

Mitglied
Noar hat gesagt.:
Müssen die Elementnamen evtl. in korrekter Schreibweise abgefragt werden? Du Holst das Element mit dem Namen "datensatz", im XML gibt es aber nur "Datensatz". Groß- keinschreibung beachten?
Ich habe die Groß/kleinschreibung in meinem Code richtig. Hab sie nur falsch übertragen.

Roar hat gesagt.:
deine xml datei ist nicht well-formed, das heißt sie wird nichtmal geparst. außerdem sind Name und Haarfarbe keine attribute von Datensatz sondern kind-elemente (außerdem s. noars einwand)
Warum ist die XML nicht well-formed? Jeder Tag wird wieder "geschlossen". Das ist doch die einzige Bedingung, oder?
 

Capasso

Bekanntes Mitglied
Wohlgeformt
Ein wohlgeformtes Dokument bedeutet:

- Ein XML-Dokument besteht aus einem Prolog und min. einem Element
- Es gibt nur ein Hauptelement
- Alle Elemente sind richtig verschachtelt
- Alle Attributwerte stehen in Anführungszeichen (doppelte oder einfache)
- Ein Element darf nicht zwei Attribute mit dem selben Namen besitzen
- Kommentare dürfen nicht direkt in den Elementen eingefügt werden
- Reservierte Zeichen, wie < oder > sind in der speziellen Form & bzw. & anzugeben


Also mindesatens das solltest du ändern:
Code:
<Datensatz> 
   <Name>Bernd</Name> 
   <Haarfarbe>Braun</Haarfarbe> 
</Datensatz> 
<Datensatz> 
   <Name>Norbert</Name> 
   <Haarfarbe>Blond</Haarfarbe> 
</Datensatz>

in

Code:
<Datensaetze>
  <Datensatz> 
     <Name>Bernd</Name> 
     <Haarfarbe>Braun</Haarfarbe> 
   </Datensatz> 
  <Datensatz> 
     <Name>Norbert</Name> 
     <Haarfarbe>Blond</Haarfarbe> 
  </Datensatz>
</Datensaetze>
 

chrgai

Mitglied
Auch die abgeänderte xml-Datei lässt sich nicht wie gewünscht einlesen.
Das XStream Projekt ist auch nicht das was ich brauche, da ich dann für
jeden Datensatz eine eigene Datei anlegen müsste. Ich will aber alles
in einer Datei unterbringen.
Da ich mittlerweile eine totale Denkblockade beim Thema xml habe, bitte
ich um Lösungsansätze.
Was soll der Code können:
Eine xml-Datei einlesen und für jeden Datensatz ein Objekt erzeugen.
Aus einem Vector<Datensatz> eine xml-Datei erzeugen.
Mehr nicht. Das kann doch nicht so schwer sein?!? Java soll ja xml-freundlich
sein, was mir schwer fällt zu glauben :D

/christian
 

Wolfgang Lenhard

Bekanntes Mitglied
Naja, man kann mit XStream auch eine Liste von Objekten, oder ein Array etc., also z. B. in Deinem Fall Vector<Datensatz> in eine einzelne Datei serialisieren. Das mache ich ständig und hatte noch nie Probleme.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
MiMa Buch Metadaten aus XML Datei parsen XML & JSON 48
I Suche gutes Buch zu XML XML & JSON 2
S Suche Buch zu XSD XML & JSON 5
M Gutes XML-Buch XML & JSON 3

Ähnliche Java Themen

Neue Themen


Oben