# Welche Klassen zum erzeugen/auslesen eines XML Files verwend



## Ghosti (1. Aug 2008)

Hallo,

ich bin gerade dabei mir ein DVD Programm zu erstellen und die Daten möchte ich in einem XML Files ablegen und später daraus wieder die Daten auslesen bzw. ändern.

Welche Klassen wären dafür am besten geeignet um eine XML Datei zu erzeugen?

Wie schaut es mit der Geschwindigkeit beim Auslesen von großen Files aus, bzw. beim suchen nach Daten oder ändern von Daten aus?

Danke für eure Hilfe


----------



## byte (1. Aug 2008)

Wenns Dir um Geschwindigkeit geht, dann guck Dir StAX an.


----------



## Ghosti (1. Aug 2008)

In erster Linie geht es mir um die Unterschiede. Welche wofür am besten eignet sind bzw. welche sich für mein Projekt eignen würden.

Wo liegen die Hauptunterschiede?


----------



## Wildcard (1. Aug 2008)

Em besten lässt sich XML mit XML Binding Frameworks wie EMF, oder JaxB verwenden.
Für's suchen über große Datenbestände kann ich dir Lucene ans Herz legen (die Frage war allerdings recht allgemein, daher sind konkrete Empfehlungen schwierig)


----------



## Ghosti (1. Aug 2008)

@wildcard

wie ich schon geschrieben habe. Es soll ein DVD Programm werden. D.h. im XML File werden Sachen wie Titel, FSK, Genre, Schauspieler usw. stehen.

Das ganze halt für ein paar hundert (später mehr) Filme.

Spricht etwas gegen DOM für die Erstellung der XML files bzw. wo sind die Vorteile bei z.b. JaxB?


----------



## Ghosti (1. Aug 2008)

das Xml File soll auf der HD abgelegt werden. also nicht irgnedwo auf einem Server.


----------



## foobar (2. Aug 2008)

Ich würde das an deiner Stelle mit einem Embedded Rdbms wie Hsqldb lösen. Hsqldb kann die Daten auch lokal auf der Platte als XML speichern nur mit dem Unterschied, daß du ganz normal JDBC als API verwenden kannst.


----------



## Ghosti (2. Aug 2008)

@foobar

will das ganze ohne JDBC haben. Einfach alles in Files.


----------



## Guest (4. Aug 2008)

Erstelle einfach eine Klassenhierarchie für deine DVDs und füge die entsprechenden JAXB-Annotationen 
in die Klassen ein. Das Lesen und Speichern geht mit JAXB ganz einfach. z.B. mit diesen generischen Methoden
	
	
	
	





```
/**
 * Liest eine XML Datei ein und liefert das Root-Element zurück.
 * 
 * @param <T> Typ des Root-Elements
 * @param file XML-Datei
 * @param type Klasse des Root-Elements
 * @return Root-Element
 * @throws JAXBException Fehler beim Lesen aus XML
 */
@SuppressWarnings("unchecked")
public static <T> T load(File file, Class<T> type) throws JAXBException {
   assert file != null;
   assert type != null;
   JAXBContext ctx = JAXBContext.newInstance(type);
   Unmarshaller unmarshaller = ctx.createUnmarshaller();
   return (T)unmarshaller.unmarshal(file);
}

/**
 * Speichert das gegebene Element in einer XML-Datei
 * 
 * @param <T> Typ des Root-Elements
 * @param file XML-Datei
 * @param root Root-Element
 * @throws JAXBException Fehler beim Schreiben in XML
 */
public static <T> void store(File file, T root) throws JAXBException {
   assert file != null;
   assert root != null;
   JAXBContext ctx = JAXBContext.newInstance(root.getClass());
   Marshaller marshaller = ctx.createMarshaller();
   marshaller.marshal(root, file);
}
```


----------



## Ghosti (5. Aug 2008)

Vielen Dank,

werde das mal versuchen


----------

