# Übung zur Buchverwaltung



## fatpipe (11. Sep 2008)

Hallo, 
ich sitze gerade an einer Übung zur Bücherverwaltung. 
In einer XML-Datei sind gespeichert: Name des Buches, Autor, Erscheinungsjahr, Verlag und Auflage.
Das sieht erstmal so aus:

```
<?xml version="1.0" encoding="utf-8"?>
<buchverzeichnis>
	<buch>
		<name>Erstes Buch</name>
		<autor>Erster Autor</autor>
		<jahr>2001</jahr>
		<verlag>Erster Verlag</verlag>
		<auflage>Erste Auflage</auflage>
	</buch>
	<buch>
		<name>Zweites Buch</name>
		<autor>Zweites Autor</autor>
		<jahr>2002</jahr>
		<verlag>Zweiter Verlag</verlag>
		<auflage>Zweite Auflage</auflage>
	</buch>
	<buch>
		<name>Drittes Buch</name>
		<autor>Drittes Autor</autor>
		<jahr>2003</jahr>
		<verlag>Dritter Verlag</verlag>
		<auflage>Dritte Auflage</auflage>
	</buch>
</buchverzeichnis>
```

Ziel soll es sein die Daten als Literaturverweis per Drag and Drop in andere Texteditoren zu kopieren.

Hab da im Moment noch nicht ganz den Durchblick.

Ich denke mal ich brauche folgende Klassen:



eine zum lesen der XML-Datei
eine zum schreiben einer geänderten Datei
eine zur Anzeige (soll mit swing realisiert werden)

Das Lesen funktioniert erst einmal:
Hier der Code:

```
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.CharacterData;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class XMLExport  {
	public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException{
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document doc = builder.parse("bibref.xml");
		NodeList nodes = doc.getElementsByTagName("buch");
		for (int i = 0; i < nodes.getLength(); i++) {
	       Element element = (Element) nodes.item(i);

	       NodeList name = element.getElementsByTagName("name");
	       Element line = (Element) name.item(0);
	       System.out.println("Name: " + getCharacterDataFromElement(line));
	       
	       NodeList autor = element.getElementsByTagName("autor");
	       line = (Element) autor.item(0);
	       System.out.println("Autor: " + getCharacterDataFromElement(line));
	       
	       NodeList jahr = element.getElementsByTagName("jahr");
	       line = (Element) jahr.item(0);
	       System.out.println("Erscheinungjahr: " + getCharacterDataFromElement(line));
	       
	       NodeList verlag = element.getElementsByTagName("verlag");
	       line = (Element) verlag.item(0);
	       System.out.println("Verlag: " + getCharacterDataFromElement(line));
	       
	       NodeList auflage = element.getElementsByTagName("auflage");
	       line = (Element) auflage.item(0);
	       System.out.println("Auflage: " + getCharacterDataFromElement(line));
	       
	     } 
	}
	public static String getCharacterDataFromElement(Element e) {
		   Node child = e.getFirstChild();
		   if (child instanceof CharacterData) {
		     CharacterData cd = (CharacterData) child;
		       return cd.getData();
		     }
		   return "?";
		 }
}
```

Habt ihr erstmal noch Ideen und Anregungen, Tips oder Ratschläge?


----------



## Faruun (18. Sep 2008)

Schau Dir mal jdom an ;-)

www.jdom.org


----------



## ARadauer (19. Sep 2008)

mal ein paar Tipps von mir:

du brauchst sicher mal eine Klasse für ein Buch
ich würde mir mal das mvc Pattern anschaun
 kurz du hast eine model dass die daten hält, eine view die diese anzeigt und einen controller als vermittler
observer pattern anschaun
dao pattern anschaun (is ja egal ob db oder xml - datenzugriff halt)

ich würds so machen:
-controller instanziert eine model
-controller instanziert eine view und gibt model als argument mit
-view registriert sich bei model als listener

-user klickt auf button für laden
-kommando geht an controller
- entweder lädt dieser jetzt die Daten über ein Dao und setzt es dem model, oder er weißt das model an die daten selber über das dao zu laden
- dao hält eine liste von Büchern und informiert view über die datenänderung
-view stellt die daten zb in tabelle dar

usw.. usw...


----------

